成員變量的調用和創建類時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