fatherClass obj = new sonClass();其中,fatherClass 是父类名称或接口名称,obj 是创建的对象,sonClass 是子类名称。
sonClass obj = (sonClass) fatherClass;其中,fatherClass 是父类名称,obj 是创建的对象,sonClass 是子类名称。
Animal animal = new Dog(); // 向上转型,把Dog类型转换为Animal类型 Dog dog = (Dog) animal; // 向下转型,把Animal类型转换为Dog类型
public class Animal { public String name = "Animal:动物"; public static String staticName = "Animal:可爱的动物"; public void eat() { System.out.println("Animal:吃饭"); } public static void staticEat() { System.out.println("Animal:动物在吃饭"); } }子类 Cat 的代码如下:
public class Cat extends Animal { public String name = "Cat:猫"; public String str = "Cat:可爱的小猫"; public static String staticName = "Dog:我是喵星人"; public void eat() { System.out.println("Cat:吃饭"); } public static void staticEat() { System.out.println("Cat:猫在吃饭"); } public void eatMethod() { System.out.println("Cat:猫喜欢吃鱼"); } public static void main(String[] args) { Animal animal = new Cat(); Cat cat = (Cat) animal; // 向下转型 System.out.println(animal.name); // 输出Animal类的name变量 System.out.println(animal.staticName); // 输出Animal类的staticName变量 animal.eat(); // 输出Cat类的eat()方法 animal.staticEat(); // 输出Animal类的staticEat()方法 System.out.println(cat.str); // 调用Cat类的str变量 cat.eatMethod(); // 调用Cat类的eatMethod()方法 } }通过引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机将采用以下绑定规则:
Animal:动物 Animal:可爱的动物 Cat:吃饭 Animal:动物在吃饭 Cat:可爱的小猫 Cat:猫喜欢吃鱼
animal.str = ""; // 编译出错,提示Animal类中没有str属性 animal.eatMethod(); // 编译出错,提示Animal类中没有eatMethod()方法
((Cat)animal).str = ""; // 编译成功 ((Cat)animal).eatMethod(); // 编译成功
Cat cat = (Cat)animal; // 编译成功,将Animal对象类型强制转换为Cat对象类型
Animal animal = new Cat(); if (animal instanceof Cat) { Cat cat = (Cat) animal; // 向下转型 ... }
Cat cat = new Cat(); Animal animal = cat; // 向上转型,不必使用强制类型转换
Dog dog = new Dog(); Cat cat = (Cat)dog; // 编译出错,不允许把Dog对象类型转换为Cat对象类型
本文链接:http://task.lmcjl.com/news/10611.html