关于方法覆盖的问题

Issue regarding Method Overriding

我对 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 class?

来声明它

它的用途是什么?

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

什么是抽象?

抽象就是去除最重要的一切。列表是您可能已经使用过的一个很好的例子。

无论您使用的是 ArrayListLinkedList 还是任何其他类型的 Java 列表,您都知道某些属性是您始终可以信赖的,比如获取列表的大小,获取某个点的某个元素等

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

一个ArrayList和一个LinkedList获取和设置数据的方式是不同的,但是从你这个子class的用户的角度来看,实现是一样的,你只是使用被覆盖的classes。这非常方便,因为您不需要了解编码方面的知识,尝试用链表做的任何事情,然后用数组列表,然后看看速度更快。

你在其中扮演什么角色?

在您提供的示例中,它非常简单,而且无关紧要,但假设您正在制作一个 class 以一种特别、有趣、令人惊奇的方式对列表进行排序。

如果您将所有内容都声明为 List,您的 class 的用户可以同时传入 ArrayListLinkedList,具体取决于它们是什么做,两者都会起作用。所以,要成为一名优秀的程序员,尽量让一切都尽可能抽象。尽早学习是一个很好的规则。

继承允许我们重用代码,它提高了 java 应用程序的可重用性。 注意:Inheritance最大的优点是已经存在于base class的代码不需要在child class.

中重写