当我们可以做子类引用时,制作超类引用有什么好处

时间:2016-08-19 18:27:09

标签: java binding

动态绑定比静态绑定有什么好处.. 如果我们想要访问子类的方法,那么我们可以使用子类类型的引用变量来创建相同的对象....如果我们想要调用子类的方法并使用超类类型的引用变量,那么有什么好处?

class Human{
   public void walk()
   {
       System.out.println("Human walks");
   }
}
class Boy extends Human{
   public void walk(){
       System.out.println("Boy walks");
   }
   public static void main( String args[]) {
       //Reference is of parent class
       Human myobj = new Boy();
       myobj.walk();
   }
}
O/p :Boy walks

在上面的例子中 为什么我们需要使用" Human myobj = new Boy();"相反,我们可以使用" Boy myobj = new Boy();" 我的观点是为子类对象分配超类引用的用法是什么。 我真的很困惑。请帮帮我..

1 个答案:

答案 0 :(得分:0)

您可以使用

Human myobj = new Boy();

Boy myobj = new Boy();

取决于您想要实现的目标。如果男孩有另外一种方法

playWithOther(Boy boy)

并且剩下的代码需要调用此方法,而不是必须使用后一版本。如果剩下的代码不需要调用任何Boy特定的方法,那么通常认为使用更通用的超类是一种好习惯。这样你就可以指出剩下的代码可以用于任何Human对象,所以简单地替换Boy with Girl

Human myobj = new Girl();

会奏效。你可以找到很多例子,例如:

java.util.List
java.util.ArrayList
java.util.LinkedList

在代码中,通常应将变量定义为java.util.List,然后实例化其中一个列表实现(或任何其他实现List接口的类)。此方法允许您在创建List对象时在单个位置更改List接口的实现。如果您使用不同的List实现,其余代码将不需要任何语法更改。