例如我有

class Louie extends Chinese

abstract class Chinese implements Human

interface Human


我应该将Louie objecta声明为Human,Chinese还是Louie?

我还注意到的一件事是对象变量的作用域是不同的。例如,如果我有一个中文的名称变量和一个路易的名称变量

最佳答案

超级类型的变量可以保存子类型的引用。

这表示:

Human h = new Louie();
Chinese c = new Louie();
Louie lui = new Louie();


全部有效。但:


h只能访问在Human接口中声明的方法/字段。
c可以访问Human界面以及Chinese类中的方法/字段。
lui可以访问Human界面,Chinese类和Louie类中的方法/字段。


现在,为了简单起见,仅创建这种参考,除非需要,否则没有额外的访问权限。

例如:您仅对Human接口方法感兴趣,然后创建Human类型的变量。

07-24 09:37
查看更多