例如我有
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
类型的变量。