class SuperClass{
int a=5,b=8,c=85;
void show(){
System.out.println("a*b="+(a*b));
}
}
class SubClass extends SuperClass{
int b=26,d=32;
void show() {
System.out.println("b+d="+(b+d));
}
}
public class ClassExchangeDemo{
public static void main(String args[]){
SuperClass super1; //声明基类对象
SubClass sub1; //声明子类对象
sub1=new SubClass();
super1=sub1; //子类对象转换为基类对象
System.out.println("super1.a="+super1.a+"\tsuper1.b="+super1.b+"\tsuper1.c="+super1.c);
System.out.println("super1.show():\t");
super1.show();
}
}
打印结果:
super1.a=5 super1.b=8 super1.c=85
super1.show():
b+d=58请问:为何super1=sub1以后,super1中的a,b,c还是原来的父类中的值,show()方法为何就是子类中的方法呢?
int a=5,b=8,c=85;
void show(){
System.out.println("a*b="+(a*b));
}
}
class SubClass extends SuperClass{
int b=26,d=32;
void show() {
System.out.println("b+d="+(b+d));
}
}
public class ClassExchangeDemo{
public static void main(String args[]){
SuperClass super1; //声明基类对象
SubClass sub1; //声明子类对象
sub1=new SubClass();
super1=sub1; //子类对象转换为基类对象
System.out.println("super1.a="+super1.a+"\tsuper1.b="+super1.b+"\tsuper1.c="+super1.c);
System.out.println("super1.show():\t");
super1.show();
}
}
打印结果:
super1.a=5 super1.b=8 super1.c=85
super1.show():
b+d=58请问:为何super1=sub1以后,super1中的a,b,c还是原来的父类中的值,show()方法为何就是子类中的方法呢?
特定的JVM的,所以都不是完整的。Java语言本身对这个问题有明确的定义:
在继承关系中,对于同名的成员:
1. 子类实例方法可以override 或overload父类实例方法
2. 子类类方法可以hide父类类方法
3. 子类field可以hide父类field.
多态性仅体现在override上。在对field的存取上,用的类型是引用变量的
类型,因此虽然super1引用的是子类对象,但super1的类型却是SuperClass,
super1.b当然就是SuperClass中的b了.