通过类的层次关系图,指定了检测类的代码和运行结果。编程实验实现验证JAVA的多态性,(编译时的多态,运行时的多态(方法的重载重写),向上造型(允许),向下造型(不允许)的多态)。
时间: 2024-03-24 11:38:33 浏览: 10
好的,让我来解答您的问题。
在Java中,多态性是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。Java的多态性有编译时多态和运行时多态两种。
编译时多态主要是方法的重载,即同一个类中有多个同名方法,但参数列表不同。在编译时,根据不同的参数类型选择不同的方法,这就是编译时多态。
运行时多态则是指方法的重写,即子类重新定义了父类的方法。在运行时,根据对象的实际类型来选择方法,这就是运行时多态。
在Java中,向上造型是允许的,即子类对象可以赋值给父类引用。这种方式称为向上造型。而向下造型是不允许的,即父类对象不能直接赋值给子类引用。如果需要使用子类的方法,需进行强制类型转换。
下面是一个例子:
```
public class Animal {
public void eat() {
System.out.println("动物会吃");
}
}
public class Dog extends Animal {
public void eat() {
System.out.println("狗会吃骨头");
}
public void bark() {
System.out.println("汪汪汪");
}
}
public class Test {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal animal2 = new Dog();
Dog dog = new Dog();
animal1.eat(); // 动物会吃
animal2.eat(); // 狗会吃骨头
dog.eat(); // 狗会吃骨头
dog.bark(); // 汪汪汪
// 向上造型
Animal animal3 = dog;
animal3.eat(); // 狗会吃骨头
// 向下造型,需要强制类型转换
Dog dog2 = (Dog) animal2;
dog2.eat(); // 狗会吃骨头
dog2.bark(); // 汪汪汪
// 向下造型,会抛出异常ClassCastException
Animal animal4 = new Animal();
Dog dog3 = (Dog) animal4;
}
}
```
在上面的例子中,Animal是父类,Dog是子类。当Animal类型的引用指向Dog类型的对象时,可以调用Dog类中重写的eat()方法,这就是运行时多态。而向下造型需要进行强制类型转换,如果类型不匹配会抛出异常。