java - 为什么java中引用类型可以与对象类型不同

标签 java

class Animal {

}

class Horse extends Animal {

}

public class Test {
    public static void main(){
        Animal a = new Horse();//mark1
    }
}


Animal ah = new Horse();// reference type is Animal and object is Horse

我无法完全理解以下内容: Animal ah = new Horse();//引用类型为Animal,对象为Horse
我始终保持引用类型与对象相同
我想知道使用不相同引用类型的原因。请告诉我一些使用它更合适的条件

最佳答案

这适用于多种情况,一个简单的例子是如果您需要一组动物:

Animal array[] = new Animal[3];
array[0] = new Horse();
array[1] = new Cow();
array[2] = new Animal();

您可以定义一些通用方法,或者为每个扩展的类指定它们。

public class Cow extends Animal {
    public void sound() {
        System.out.println("MOO");
    }
}

public class Horse extends Animal {
    public void sound() {
        System.out.println("HEEEHREHE");
    }
}

在《动物》中,你不知道要做什么,所以你可以使用类似的东西

public class Animal {
    public void sound() {
        System.out.println(".");
    }
}

问题是,如果您遍历数组中的每只动物,它将使用为其定义的方法。

for (int i = 0; i < 3; i++) {
    array[i].sound();
}

将输出:

HEEEHREHE
MOO
.

关于java - 为什么java中引用类型可以与对象类型不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597203/

相关文章:

java - 默认的 TransformerFactory 是什么?

java - 在 Play 框架中测试 Controller

java - 在 Android 模拟器中以 "Airplane"模式进行测试

java - 外部 Maven repo 和 Jenkins

java - Java 中基于正则表达式的字符串拆分

java - 非等间隔时间序列数据的Round Robin数据存储

Java 字符串到 SHA1

java - 对于 Crestron/Extron,有 Java Lua D 语言的框架吗?

java - 如何在创建文件之前检查可用磁盘空间

java - 无法连接到 Watson Platform