黑马程序员技术交流社区
标题:
关于父类引用指向子类对象的问题
[打印本页]
作者:
nicholyx
时间:
2014-3-14 11:58
标题:
关于父类引用指向子类对象的问题
父类引用可以指向子类对象,例如class B extends A{},主方法中A a = new B();那么父类引用a可以访问A类中的属性或者方法,a不可以访问B类中新增加的属性和方法,这个是没有问题的。a也可以调用B类中重写了A类的方法,这个也是可以的。
但是如果B类重写了A类的方法中,同时调用了B类中自己新增加的属性或者方法,那么运行也是没有问题的?这个不明白,求大神解释?
结合代码如下:
class A {
public String name;
void show() {
System.out.println("A.....show " + name + " ");
}
void fn() {
System.out.println("A....fn " + name + " ");
}
}
class B extends A {
public int age;
void show() {
fnx();
System.out.println("B.....show "+name + " "+age);
}
void fnx() {
System.out.println("B.....fnx "+name + " "+age);
}
}
class MainDemo {
public static void main(String[] args) {
A a = new B();
a.name = "张三";//可以,访问父类自己的属性
a.fn();//可以,访问父类自己的方法
//a.age = 11;//不可以,访问了子类新增加的属性
//a.fnx();//不可以,访问了子类新增加的方法
a.show();//可以,访问子类重写了父类的方法,但是该重写方法
//中调用了子类新增加的方法和属性,求解释?
/*
运行结果如下:
A....fn 张三
B.....fnx 张三 0
B.....show 张三 0
*/
}
}
复制代码
作者:
Bukeng
时间:
2014-3-14 12:26
可以看看那个第七天的视频教程。我感觉就是,A a=new B(),a虽然被定义的是A类,但是他里面有B新加的方法,A里面没有这些方法所以不能直接调用。但是现在show()被重写了,他里面写了调用fnx()的方法,而fnx()又存在于a这个对象的方法中,所以调用没问题吧
作者:
谜燕
时间:
2014-3-14 15:15
如果要运行子类特有的方法,A a = new B(); a就不行,但是可以进行强制转换:B a=(B)a;这样就可以用a访问子类特有的方法了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2