Java对象引用机制

时间:2012-09-04 04:06:51

标签: java object

我有点坚持以下问题:

两种Java语言机制允许对象引用变量的类型与它引用的对象的类型“不同”?举例说明。它们在什么意义上根本没有什么不同?

我目前的答案是“实施”和“延伸”对吗?它们是相似的,因为它们都会创建一个类,至少会拥有超类的所有方法签名,可以是实际的,抽象的或接口。它是否正确?提前谢谢!

3 个答案:

答案 0 :(得分:3)

这或多或少是正确的。你的答案的第二部分应该讨论子类型。在Java中,对象仅具有相同的方法签名是不够的。实际上必须有一个声明的子类型关系(通过extends / implements)。

这不仅仅是迂腐。在某些语言(但不是Java)中,仅仅存在兼容的方法签名就足以实现类型兼容性。这被称为“鸭子打字”。

答案 1 :(得分:1)

用工具

interface Animal {
   void attackHuman(); // actually public abstract by default
}
class Horse implements Animal {
   public void attackHuman() { }; // must implement
}

// type and reference the same
Horse a1 = new Horse();

// type and reference different
Animal a2 = a1;

扩展

class Animal {
   void attackHuman();
}
class Dinosaur extends Animal {
   // attackHuman() inherited
}

// type and reference the same
Dinosaur a1 = new Dinosaur();

// type and reference different
Animal a2 = a1;

答案 2 :(得分:0)

请参阅此示例....

- 此处动物Super-Class是{其中{1}}。

- 您可以使用inherited创建 Dog 对象。

- 这称为Animal Object Reference Variable

Class Polymorphism