黑马程序员技术交流社区

标题: 面向对象的继承性 为什么是这个样子的 [打印本页]

作者: heheka123    时间: 2014-3-31 15:47
标题: 面向对象的继承性 为什么是这个样子的
本帖最后由 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();
为什么调用的是父类的私有方法
作者: 心?=忐§忑]    时间: 2014-3-31 16:02
B b = new B();
因为父类中的方法是私有权限的,所以子类不能腹写方法,则就不会调用子类的方法。
A  a = new B();
实例化对象向上转型了,肯定调用父类的方法。
作者: osully    时间: 2014-3-31 16:04
B b = new B();
b.getMessage();  这个是继承的父类的,方法还是在父类中,方法中只能操作父类的属性或方法,还是一句话除非被复写了才会去找子类的


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


作者: H-Deka    时间: 2014-3-31 17:39
B b = new B();
b.getMessage();  B继承了A的getMessage()方法,所以b.getMessage()调用的是父类的getMessage()方法,该方法内又调用了自己的showMessage()方法
A a = new B();
a.getMessage();
指向子类的父类引用,所以a.getMessage()还是调用的父类方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2