gpt4 book ai didi

java - 有关方法重写的问题

转载 作者:行者123 更新时间:2023-12-01 19:32:35 25 4
gpt4 key购买 nike

我对 java 中的方法重写感到困惑。

从它的定义来看:

In any object-oriented programming language, Overriding is a feature that allows a subclass or child class to provide a specific implementation of a method that is already provided by one of its super-classes or parent classes.

现在,下面是一个相关示例:

  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 类来声明它?

它的目的是什么?

最佳答案

就像您所说,您不需要将子类对象声明为其父类,但在其他情况下这可能很重要,例如当您试图使事物抽象时。

什么是抽象?

抽象就是去除除了最本质的东西之外的所有东西。您可能已经大量使用的一个非常好的例子是列表。

无论您使用的是 ArrayListLinkedList 还是任何其他类型的 Java 列表,您都知道总有某些属性值得信赖,比如获取列表的大小、获取某个点的某个元素等。

这极大地简化了它们的使用,您可以根据您的应用程序互换它们。这都是因为它们是 List 的子类,这些方法来自于 List。

ArrayList 和 LinkedList 获取和设置数据的方式不同,但从您(这些子类的用户)的角度来看,实现是同样,您只需使用被覆盖的类即可。它非常方便,因为您不需要了解任何有关编码的知识,尝试使用链表执行任何操作,然后使用数组列表,然后看看哪个更快。

您在其中扮演什么角色?

在您给出的示例中,它非常简单,并且并不重要,但是假设您正在创建一个以特定的、有趣的、令人惊奇的方式对列表进行排序的类。

如果您将所有内容声明为 List,则类的用户可以传入 ArrayListLinkedList,具体取决于他们正在做什么,两者都会起作用。因此,要成为一名优秀的程序员,请尝试使所有内容尽可能抽象。尽早学习这是一个很好的规则。

关于java - 有关方法重写的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59123040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com