【发布时间】:2016-11-27 02:33:10
【问题描述】:
我见过一些实例化新对象的引用如下,尤其是在使用继承时。
Cat cat = new Animal();
但是,我不知道这个概念叫什么。所以,我无法阅读它。
我有两个问题。
- 这个概念叫什么?
- 这怎么可能,那个,你可以 使用不同于它的类型持有/引用一个对象 原班?
【问题讨论】:
我见过一些实例化新对象的引用如下,尤其是在使用继承时。
Cat cat = new Animal();
但是,我不知道这个概念叫什么。所以,我无法阅读它。
我有两个问题。
【问题讨论】:
Cat 是Animal 的一种,但反过来不一定对。
因此,Animal 可以是 Cat、Dog 或其他任何类型,因为猫和狗确实具有动物的特性。这也称为泛化和专业化。 Animal 是通用类别,而Cat 是Animals 的特殊类别。互联网上有很多可用的资源。看看并了解面向对象的编程范式。祝你好运!
【讨论】:
这里的基本概念是继承。一个开始阅读它的好地方是https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
你的例子是相反的——它应该是
Animal animal = new Cat();
这是因为 Cat 类将是一种特定类型的 Animal — 具有创建 Animal 对象所需的一切,以及一些额外的内容。
在代码中,这可能类似于:
public class Test
{
public static class Animal
{
protected String sound;
public String getSound() { return sound; }
public Animal() { sound = ""; }
}
public static class Cat extends Animal
{
public Cat() { super(); sound = "meow"; }
}
public static void main(String[] args) {
Animal animal = new Cat();
System.out.println(animal.getSound());
}
}
结果是
喵喵
因为 Cat 对象具有来自父 Animal 的 getSound() 方法,但它是使用自己的构造函数创建的并适当地设置数据。
【讨论】: