java 向上转型之后调用子类的同名变量/方法的问题(多态)
来源:互联网 发布:淘宝宝贝编辑助手 编辑:程序博客网 时间:2024/05/21 22:29
直接引用百度知道上面的一个问题吧,问得很详细,答得很明确,我自己就不总结了。
2011-6-29 18:26
提问者: 月下潜读 | 浏览次数:154次比如class Father{ String name="父";
void f(){System.out.print("父类");}
}class Son{ String name = "儿子"; void f(){System.out.print("儿子");} void f2(){}}Father s = new Son();s.name;//1s.f();//2s.f2();//3我的疑问:不是说类型是由new决定的而不是由声明决定的吗?即Father s=new Son()此时s的具体类型是什么?若是Father 那上面的2就应该输出“父类”而不是“儿子”?若是Son类那就应该能调用f2()呀?另外还有name疑问,s.name怎么会是"父"呢?真是绕来绕去啊
首先class son改一下class Son extends Father接下来分析:Father s = new Son();表示定义了一个Father类型的引用,指向新建的Son类型的对象。由于Son是继承自它的父类Father,所以Father类型的引用是可以指向Son类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的; 因此s.name调用父类的属性! f2方法父类没有,出错! 同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。因此s.f()调用子类的方法!
追问
回答
- java 向上转型之后调用子类的同名变量/方法的问题(多态)
- (多态)Java向上转型之后调用子类的同名变量/方法的问题
- 向上转型之后的方法调用问题
- (java)对象引用向上转型后,无法调用子类独有的方法和属性问题
- java向上转型方法调用的问题
- 向上转型子类的成员变量的调用
- java中复写方法和同名变量的调用问题
- java多态中向上转化类型不能调用子类的变量
- java 父类子类同名方法的调用
- Java 中继承之后同名静态变量的问题分析
- Java多态之向上转型、同名变量以及方法覆盖
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- Java的向上转型
- Java 理解 子类成员变量与父类成员变量同名 方法的重写
- 【Java基础】——变量向上转型后的实例变量与方法的访问
- 指向子类对象的父类引用(向上转型)
- 我的程序员之路(八)
- Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析
- Android4.0 Keyguard解锁屏机制
- (源码)VC开发百分百仿360安全卫士界面,可换肤,可缩放
- 字符串之字符串左旋
- java 向上转型之后调用子类的同名变量/方法的问题(多态)
- MFC中创建新消息
- 棋类竞赛网站(不断更新)
- hdu 1159 Common Subsequence 最长公共子序列
- 在MFC中添加用户自定义消息【转载】
- 解决MyEclipse中使用Alt+/没有提示的问题
- 用快排实现寻找数组中的最小k个数
- 线程的创建和退出
- 堆栈的使用