是吗? 示例2: class Super { public void print() { System.out.println("super"); } } public class Sub extends Super { public void print() { System.out.println("sub"); } public static void main(String[] args) { Super test = new Sub(); test.print(); } } 运行结果:sub 那这个怎么解释?
Super test = new Sub(); 这种情况实际上是多态的表现。多态是指一个对象具有形式和实际两种形式,在调用的时候调用的是实际类型。(编译时却还是按形式) 比如上一条语句,test对象的形式类型是Super的,而实际创建时却是Sub类型。 那么在test.print();执行时,执行的是子类的方法。(所谓调用/使用的是实际类型) 而变量不具有多态。 我记得是在什么地方看到的。如有出入,或需详细举例讨论,下次找来再回复。
在上篇回复基础上: -------------------------------------------------------------- 修改后的示例2: class Super { public void print() {System.out.println("super-print");} void methodSuper() {System.out.println("super-methodSuper");} } class Sub extends Super { public void print() {System.out.println("sub");} void methodSub() {System.out.println("sub-methodSub");} } public class Test { public static void main(String[] args) { Super test = new Sub(); test.print();//运行结果:sub test.methodSuper();//运行结果:super-methodSuper test.methodSub ();//编译错误 } } //注:在1.3.1通过 ----------------------------------------------------------------- 1 编译时看形式类型,因此语句test.methodSub ();//编译错误 2 执行时看实际类型,因此test.print();//运行结果:sub 3 子类没有methodSuper,但却从父类那里继承来了。因此test.methodSuper();//运行结果:super-methodSuper 4 注意,多态只对实例方法而言,并不用在类方法(静态方法)和域。 ------------------------------------------------------------------ 我是来学习的,很高兴能帮到你。愿我们互相帮助!
示例2:
class Super
{
public void print()
{
System.out.println("super");
}
}
public class Sub extends Super
{
public void print()
{
System.out.println("sub");
}
public static void main(String[] args)
{
Super test = new Sub();
test.print();
}
}
运行结果:sub
那这个怎么解释?
而Class Member是不能被动态绑定的。忘了是哪一本书里有对这个问题的具体分析去了,自己找找吧。^_^
这种情况实际上是多态的表现。多态是指一个对象具有形式和实际两种形式,在调用的时候调用的是实际类型。(编译时却还是按形式)
比如上一条语句,test对象的形式类型是Super的,而实际创建时却是Sub类型。
那么在test.print();执行时,执行的是子类的方法。(所谓调用/使用的是实际类型)
而变量不具有多态。
我记得是在什么地方看到的。如有出入,或需详细举例讨论,下次找来再回复。
--------------------------------------------------------------
修改后的示例2:
class Super
{
public void print()
{System.out.println("super-print");}
void methodSuper()
{System.out.println("super-methodSuper");}
}
class Sub extends Super
{
public void print()
{System.out.println("sub");}
void methodSub()
{System.out.println("sub-methodSub");}
}
public class Test
{ public static void main(String[] args)
{ Super test = new Sub();
test.print();//运行结果:sub
test.methodSuper();//运行结果:super-methodSuper
test.methodSub ();//编译错误
}
}
//注:在1.3.1通过
-----------------------------------------------------------------
1 编译时看形式类型,因此语句test.methodSub ();//编译错误
2 执行时看实际类型,因此test.print();//运行结果:sub
3 子类没有methodSuper,但却从父类那里继承来了。因此test.methodSuper();//运行结果:super-methodSuper
4 注意,多态只对实例方法而言,并不用在类方法(静态方法)和域。
------------------------------------------------------------------
我是来学习的,很高兴能帮到你。愿我们互相帮助!