class SuperClass {
public void f() {
System.out.println("SuperClass.f()/");
}
}
class SubClass extends SuperClass {
public void f() {
System.out.println("SubClass.f()/");
}
}
public class ThirdClass { public void g(SuperClass arg){
System.out.println("g(SuperClass)/");
arg.f();
} public void g(SubClass arg){
System.out.println("g(SubClass)/");
arg.f();
} public static void main(String[] args){
ThirdClass tc = new ThirdClass();
SuperClass sc = new SubClass();
tc.g(sc);
}
}求详细解释!
public void f() {
System.out.println("SuperClass.f()/");
}
}
class SubClass extends SuperClass {
public void f() {
System.out.println("SubClass.f()/");
}
}
public class ThirdClass { public void g(SuperClass arg){
System.out.println("g(SuperClass)/");
arg.f();
} public void g(SubClass arg){
System.out.println("g(SubClass)/");
arg.f();
} public static void main(String[] args){
ThirdClass tc = new ThirdClass();
SuperClass sc = new SubClass();
tc.g(sc);
}
}求详细解释!
解决方案 »
- 求高手:看看简单代码的问题
- 求学习方法~~三大框架都学一个月了还没有头绪~~~~自信被毁了,想退出
- 如何设置系统变量才可以在任何目录下都引用自定义包
- 多进程共享连续计数
- Awt中的单选菜单怎么实现,是哪个类,,,提示一下...记不清楚了..
- 初学者关于时间的问题
- 如何将JAVA项目打包为可执行程序?
- java.util.NoSuchElementException: Hashtable Enumerator是什么意思啊?
- 请教问题,有分大家拿(jTable)
- 小白请教下Java里 FileInputStream.read读取机制的问题。
- 输入血型,返回用户性格,遇到AB血型,char不能识别怎么办?
- 关于表的多对多的设计问题
System.out.println("g(SuperClass)/");
arg.f(); //此处是多态的体现,调用子类的f()方法;
}
SubClass.f()
子类可是说“是父类”,父类不能说“是子类”,例如:可以说奔驰是汽车,不能说汽车是奔驰,汽车是父类,奔驰是汽车的
子类,SuperClass sc = new SubClass(); sc是SubClass的引用,调用tc.g(sc)时,向上转型为SuperClass,即调用的是tc的
public void g(SuperClass arg)的方法,在g(SuperClass arg)方法内调用arg的f()方法时,因为arg是SubClass的引用,所以
输出的是SubClass.f()/。
明白否?多态。
对属性,类型都无效。SuperClass sc = new SubClass();
这里sc是superClass类型,所以匹配public void g(SuperClass arg)
g(SuperClass)/
SubClass.f()/SuperClass sc = new SubClass();
sc的编译时类型是SuperClass,运行时类型是SubClass。
tc.g(sc); 编译器在编译这句时:发现sc的类型是SuperClass
把调用的函数指定为:
public void g(SuperClass arg){
System.out.println("g(SuperClass)/");
arg.f();
}
运行到arg.f()的时候,由于arg的运行时类型是SubClass,所有调用
public void f() {
System.out.println("SubClass.f()/");
}
理解这个帖子的关键是知道什么是在编译是决定,什么在运行时决定。