关于方法覆盖的问题
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,但在其他情况下这可能很重要,例如当您试图使事物变得抽象时。
什么是抽象?
抽象就是去除最重要的一切。列表是您可能已经使用过的一个很好的例子。
无论您使用的是 ArrayList
、LinkedList
还是任何其他类型的 Java 列表,您都知道某些属性是您始终可以信赖的,比如获取列表的大小,获取某个点的某个元素等
这极大地简化了它们的使用,您可以根据您的应用程序互换它们。这都是因为它们是List
的subclass,这些方法都来自
一个ArrayList
和一个LinkedList
获取和设置数据的方式是不同的,但是从你这个子class的用户的角度来看,实现是一样的,你只是使用被覆盖的classes。这非常方便,因为您不需要了解编码方面的知识,尝试用链表做的任何事情,然后用数组列表,然后看看速度更快。
你在其中扮演什么角色?
在您提供的示例中,它非常简单,而且无关紧要,但假设您正在制作一个 class 以一种特别、有趣、令人惊奇的方式对列表进行排序。
如果您将所有内容都声明为 List
,您的 class 的用户可以同时传入 ArrayList
和 LinkedList
,具体取决于它们是什么做,两者都会起作用。所以,要成为一名优秀的程序员,尽量让一切都尽可能抽象。尽早学习是一个很好的规则。
继承允许我们重用代码,它提高了 java 应用程序的可重用性。
注意:Inheritance最大的优点是已经存在于base class的代码不需要在child class.
中重写
我对 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,但在其他情况下这可能很重要,例如当您试图使事物变得抽象时。
什么是抽象?
抽象就是去除最重要的一切。列表是您可能已经使用过的一个很好的例子。
无论您使用的是 ArrayList
、LinkedList
还是任何其他类型的 Java 列表,您都知道某些属性是您始终可以信赖的,比如获取列表的大小,获取某个点的某个元素等
这极大地简化了它们的使用,您可以根据您的应用程序互换它们。这都是因为它们是List
的subclass,这些方法都来自
一个ArrayList
和一个LinkedList
获取和设置数据的方式是不同的,但是从你这个子class的用户的角度来看,实现是一样的,你只是使用被覆盖的classes。这非常方便,因为您不需要了解编码方面的知识,尝试用链表做的任何事情,然后用数组列表,然后看看速度更快。
你在其中扮演什么角色?
在您提供的示例中,它非常简单,而且无关紧要,但假设您正在制作一个 class 以一种特别、有趣、令人惊奇的方式对列表进行排序。
如果您将所有内容都声明为 List
,您的 class 的用户可以同时传入 ArrayList
和 LinkedList
,具体取决于它们是什么做,两者都会起作用。所以,要成为一名优秀的程序员,尽量让一切都尽可能抽象。尽早学习是一个很好的规则。
继承允许我们重用代码,它提高了 java 应用程序的可重用性。 注意:Inheritance最大的优点是已经存在于base class的代码不需要在child class.
中重写