0基础学做网站,什么做网站做个网站一般要多少钱啊,o2o 网站,四川德阳做网站和app在看java继承这一块的时候发现了一个问题#xff0c;即父类未被子类覆盖的方法是如何调用的#xff1f; 是子类拥有了父类的该方法只是没有显示表示#xff0c;还是子类调用了父类的该方法。 为此做了一下验证 代码如下#xff1a; public class One {protected void print…在看java继承这一块的时候发现了一个问题即父类未被子类覆盖的方法是如何调用的 是子类拥有了父类的该方法只是没有显示表示还是子类调用了父类的该方法。 为此做了一下验证 代码如下 public class One {protected void printA() {System.out.println(父类printA);}private void printB() {System.out.println(父类printB);}private void printC() {System.out.println(父类printC);}protected void printABC() {printA();printB();printC();}
}public class Two extends One {protected void printA() {System.out.println(子类printA);}private void printB() {System.out.println(子类printB);}public void printC() {System.out.println(父类printC);}public static void main(String[] args) {Two t new Two();
// One t new Two();t.printABC();}
} 对于第一种情况子类拥有了父类的该方法只是没 有显示表示 由于printABCD方法中调用了printA()、printB()、printC()、printD()并且printB()在父类中是私有的所以不可以被子类继承。如果是这种情况的话应该会编译时报错。然而没有报错显然不是第一种情况。 对于第二种情况子类调用了父类的该方法 根据运行结果 这里就会有个疑问-如果是调用了父类方法为什么会printA会使用子类的方法呢 事实上运行过程应该是这样的子类在调用printABCD方法时因为自己没有重写这个方法所以是调用父类的该方法。 即默认为 Overrideprotected void printABCD() {// TODO Auto-generated method stubsuper.printABCD();} 调用父类printABCD后接着要执行printA()、printB()、printC()、printD()四个方法。其中子类只对printA()进行了覆盖printB()没有进行覆盖printC()、printD()不存在覆盖。因此在调父类的printABCD方法在执行时如果判断内部执行的方法没有对父类的方法进行覆盖则使用父类的方法否则使用覆盖后的方法。转载于:https://www.cnblogs.com/liuleicode/p/4953892.html