Java 的转型分为上转型和下转型,上转型简单概括即将子类对象转成父类对象。比如:
1
| Animal animal = new Cat();
|
上转型后,不能使用子类新增的成员变量和成员方法。
如果父类和子类存在同名的成员变量,在转型之前,子类对象调用该变量时,调用的就是子类的成员变量;转型之后,调用该变量时,调用的是父类的成员变量。如果子类覆盖了父类的成员方法,在转型之前,子类调用该方法,调用的就是子类的成员方法;在转型之后,调用该方法,调用是子类的成员方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Animal {
public void fun1(Animal animal) { System.out.println("Animal , Animal"); }
public void fun2(Cat cat) { System.out.println("Animal , Cat"); }
public void fun3(OrangeCat orangeCat) { System.out.println("Animal , OrangeCat"); } }
|
1 2 3 4 5 6 7 8 9 10
| public class Cat extends Animal {
public void fun1(Animal animal) { System.out.println("Cat , Animal"); }
public void fun2(Cat cat) { System.out.println("Cat , Cat"); } }
|
1 2 3
| public class OrangeCat extends Cat {
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class Main {
public static void main(String[] args) { Animal animal = new Animal(); Animal ab = new Cat(); Cat cat = new Cat(); OrangeCat orangeCat = new OrangeCat();
animal.fun1(animal); animal.fun1(ab); animal.fun2(cat); animal.fun3(orangeCat);
System.out.println("-------------");
ab.fun1(animal); ab.fun1(ab); ab.fun2(cat); ab.fun3(orangeCat);
System.out.println("-------------");
cat.fun1(animal); cat.fun1(ab); cat.fun2(cat); cat.fun3(orangeCat); }
}
|