A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 heheka123 于 2014-4-3 21:59 编辑

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();
为什么调用的是父类的私有方法

A a = new B();
a.getMessage();
为什么调用的是父类的私有方法

4 个回复

倒序浏览
B b = new B();
因为父类中的方法是私有权限的,所以子类不能腹写方法,则就不会调用子类的方法。
A  a = new B();
实例化对象向上转型了,肯定调用父类的方法。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
B b = new B();
b.getMessage();  这个是继承的父类的,方法还是在父类中,方法中只能操作父类的属性或方法,还是一句话除非被复写了才会去找子类的


A a = new B();
a.getMessage();  父类引用指向子类对象,多态!
第一,只能调用父类存在的方法.如果被子类复写才回去调用子类的

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
B b = new B();
b.getMessage();  B继承了A的getMessage()方法,所以b.getMessage()调用的是父类的getMessage()方法,该方法内又调用了自己的showMessage()方法
A a = new B();
a.getMessage();
指向子类的父类引用,所以a.getMessage()还是调用的父类方法

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马