当我可以通过引用子类访问所有方法时,为什么要引用基类?

sat*_*esh 3 java oop polymorphism inheritance

我正在学习java概念.我对java继承概念有疑问.在继承中,我们可以将子类实例分配给基类引用,并且我们只能访问基类函数.我们可以将继承层次结构中的任何子类实例分配给基类引用.对于分配给特定基类引用的实例类型,我们只能访问基类函数,但我没有发现任何区别.

任何人都可以给我实际的概念,为什么我们必须将子类实例分配给基类引用?有什么需要这样做?相反,我们可以从子类引用只知道访问那些基类函数.

通过考虑层次结构中的特定基类和许多子类来解释.

Vin*_*nie 5

您可能希望这样做的原因是创建更强大的设计.以Java中的Collections Framework为例.你有一个List接口,然后你有两个实现,ArrayList和LinkedList.

您可以编写程序以专门使用LinkedList或ArrayList.但是,您的程序依赖于这些特定的实现.

如果你编写的程序依赖于超类型List,那么你的程序可以适用于任何一个List实现.假设您想编写一个对List执行某些操作的方法,并且您写了这个:

  public void doSomething(ArrayList a){}
Run Code Online (Sandbox Code Playgroud)

此方法只能使用ArrayList调用,而不能使用LinkedList调用.假设你想用LinkedList做同样的事情?那你复制你的代码吗?没有.

  public void doSomething(List l){}
Run Code Online (Sandbox Code Playgroud)

将能够接受任何类型的List.

这背后的原理是接口的程序而不是实现.也就是说,List定义了ALL列表的功能.

这种用法有很多例子.