成员变量的调用和创建类时new后面的类型无关,和当前实力所属的类型有关;
调用方法时,只与new后面的类型有关。
代码:
<span style="font-size:14px;">public class Mastiff extends Dog {
public String type="子类成员变量赋值";
@Override
public void fun1() {
System.out.println("Mastiff fun1");
}
@Override
public void fun2() {
System.out.println("Mastiff fun2");
}
public static void main(String[] args){
Mastiff mastiff = new Mastiff();
System.out.println(mastiff.type);
mastiff.fun1();
mastiff.fun2();
Dog dog1 = new Mastiff();
System.out.println(dog1.type);
dog1.fun1();
dog1.fun2();
Dog dog2 = (Dog)mastiff;
System.out.println(dog2.type);
dog2.fun1();
dog2.fun2();
}
} </span>
<span style="font-size:14px;">public abstract class Dog {
public String type="父类成员变量赋值";
public abstract void fun1();
public void fun2() {
System.out.println("Dog fun2");
}
}</span>
执行结果:
子类成员变量赋值
Mastiff fun1
Mastiff fun2
父类成员变量赋值
Mastiff fun1
Mastiff fun2
父类成员变量赋值
Mastiff fun1
Mastiff fun2