我对Java中的方法重写感到困惑。
从定义上说:
在任何面向对象的编程语言中,覆盖都是一项功能 允许子类或子类提供特定的 一种方法的实现,该方法已经由其一个提供 超级类或父类。
现在,以下是与此有关的一个示例:
class Parent {
void show()
{
System.out.println("Parent's show()");
}
}
class Child extends Parent {
@Override
void show()
{
System.out.println("Child's show()");
}
}
class Main {
public static void main(String[] args)
{
Parent obj1 = new Parent();
obj1.show();
Parent obj2 = new Child();
obj2.show();
}
}
我对此行表示怀疑:
Parent obj2 = new Child();
我可以使用:
Child obj2 = new Child();
那为什么我要用 Parent 类的名字来声明它?
目的是什么?
答案 0 :(得分:2)
就像您说的那样,您不需要将子类对象声明为它们的父类,但是在其他情况下这可能很重要,例如,当您尝试使事物抽象化时。
除了最重要的部分,抽象正在删除所有内容。您可能已经使用了一吨的一个很好的例子是列表。
无论您使用的是ArrayList
,LinkedList
还是任何其他类型的Java列表,您都知道可以始终依赖某些属性,例如获得列表,在特定位置获取特定元素,等等。
此DRAMATICALLY简化了它们的使用,您可以根据自己的应用程序互换它们。这是因为它们是List
的子类,这些方法来自这些子类。
ArrayList
和LinkedList
获取和设置数据的方式不同,但是从您的角度来看,这些子类的用户实现是相同的,您只需要使用被覆盖的类。这非常方便,因为您不需要了解编码方面的知识,可以尝试使用链表,数组列表尝试任何操作,然后更快地查看。
在您给出的示例中,它非常简单,并且没有关系,但是您说您正在制作一个类,该类以一种特殊,有趣且令人惊奇的方式对列表进行排序。
如果您将所有内容都声明为List
,则该类的用户可以传入ArrayList
和LinkedList
,这取决于他们在做什么,并且两者都可以工作。因此,要成为一名优秀的程序员,请尝试使所有内容尽可能抽象。早点学习是一个好规则。
答案 1 :(得分:1)
继承使我们可以重用代码,从而提高了Java应用程序的可重用性。 注意:继承的最大优点是,无需在子类中重写基类中已经存在的代码。