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对象类型
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有