黑马程序员技术交流社区
标题:
关于java继承的问题
[打印本页]
作者:
android2050
时间:
2013-3-21 13:54
标题:
关于java继承的问题
本帖最后由 陈团辉 于 2013-3-22 08:51 编辑
class A {
public void getMessage() {
showMessage();
}
private void showMessage() {
System.out.println("A");
}
}
public class B extends A {
private void showMessage() {
System.out.println("B");
}
public static void main(String[] args) {
A a = new B();
B b = new B();
a.getMessage();
b.getMessage();
}
}
复制代码
为什么输出都是A
问题补充
这个我知道
B b = new B();
b.getMessage();
为什么调用的是父类的私有方法
作者:
Alex shaw
时间:
2013-3-21 14:10
因为只有父类有getMessage方法,子类根本就没有这个方法,所以他会去父类中寻找该方法
b.getMessage(); 调用的是父类的公共方法,在B的公共方法中调用其父类的私有方法
作者:
qintoko
时间:
2013-3-21 14:38
a.getMessage();//A
b.getMessage();//自动调用父类方法,而私有方法不能被继承或被子类重写。所以调用showMessage()后显示A
作者:
程媛媛
时间:
2013-3-21 14:49
因为父类的showMessage()是私有的,不能被子类继承或覆盖。所以a.getMessage()或者b.getMessage()方法调用的都是父类的showMessage();
作者:
黑马李磊
时间:
2013-3-21 15:05
额,这个编译会通过吗?
作者:
王龙涛
时间:
2013-3-21 15:19
(1)
A a = new B();在父类中创建子类对象,使用父类中功能,体现了多态性。打印一个A
(2)
getMessage()方法是在A类中定义的,所以当执行b.getMessage();这句代码时,
JVM首先在B实例对象时无法找到匹配的getMessage()方法,所以就直接调用其父类的getMessage()方法。
由于private方法不能重载,所以子类复写父类中的showMessage()是失败的。所以又打印一个A
(3)
不光是private不能重载,static, final都不能重载。
作者:
michaelchen
时间:
2013-3-21 19:43
class A {
public void getMessage() {
showMessage();
}
private void showMessage() {
System.out.println("A");
}
}
public class B extends A {
private void showMessage() {
System.out.println("B");
}
public static void main(String[] args) {
A a = new B();//父类引用指向子类对象
B b = new B();
a.getMessage();//调用父类的getMessage()方法
b.getMessage();//此类中private方法不能被重写,所以打印A
}
}
复制代码
作者:
张文星
时间:
2013-3-21 20:26
因为子类没有重写父类的getMessage()方法,所以对象调用的getMessage()方法是从父类继承而来,而getMessage()方法中的show()调用的是本类的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2