首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

子类承继或重写父类的方法

2012-12-23 
子类继承或重写父类的方法本文仅讨论子类能否重写父类的方法,一旦重写成功,子类调用的时候是会覆盖父类的

子类继承或重写父类的方法

本文仅讨论子类能否重写父类的方法,一旦重写成功,子类调用的时候是会覆盖父类的方法的。

子类重写父类方法的时候有两个考虑:

1.父类的方法不能降级,同级的话就要覆盖,例如public方法不能在子类中被声明为protected或者private(子类重载除外),否则会有

Cannot reduce the visibility of the inherited method from Father的编译错误。

2.父类的方法可以任意升级,但升级只有两种方式,要么覆盖,要么重载,覆盖就是方法体完全一样,重载则是参数必须改变,方法名称不变。

import java.lang.reflect.Method;class Father{int a;protected int b = 5;protected void funcpro(){//父类的保护方法,子类能够访问,但子类自身没有System.out.println("father funcpro");}public void funcpub(){//父类公有方法,子类直接继承}private void funcpri(){//父类私有方法,子类不可见}}public class TestOveride extends Father {/** * @param args *///父类保护方法的重写//public void funcpro(){////子类自己可以这样定义,将会覆盖父类protected方法//System.out.println("子类的func方法");//}//protected void funcpro(){////ok//}//public short funcpro(){////illegal    父类的protected和public方法在子类中是可见的,试想一下,如果编译器认为这个方法体正确,    //那么子类调用funcpro的时候究竟调用哪个呢?这样没有能构成重载//}//private void funcpro(){////illegal//}  private void funcpro(int a){//这是方法重载,不会报错System.out.println("sun funcpro");}//父类公有方法的重写//private void funcpub(){////illegal:Cannot reduce the visibility of the inherited method from Father //}//protected void funcpub(){////illegal  Cannot reduce the visibility of the inherited method from Father//}//public void funcpub(){////ok//}//public int funcpub(){////illegal 和父类的返回值不匹配//}//public int funcpub(int i){////ok 子类构成重载//return 1;//}//父类私有方法的重写//public void funcpri(){////ok//}//protected void funcpri(){////ok//}//private void funcpri(){////ok//}public static void main(String[] args) {// TODO Auto-generated method stubTestOveride testOveride = new TestOveride();Class class1 = testOveride.getClass();try {Method[] methods = class1.getMethods();System.out.println("子类中的所有方法:");  //可以看到,并没有父类的funcpro方法for(Method m:methods){System.out.println(m);}System.out.println("子类调用父类的protected 方法:");testOveride.funcpro();System.out.println("子类调用自己的func方法:");testOveride.funcpro(1);System.out.println("子类调用父类的字段");System.out.println(testOveride.b);}catch(Exception e){e.printStackTrace();}}}

?

?

热点排行