为什么需要抽象方法?

问题描述 投票:2回答:4

最近我一直在研究抽象方法,我不明白为什么我们需要它们?我的意思是毕竟我们只是压倒它们。您知道它只是一个声明吗?我们为什么需要它们?

我还尝试从互联网上理解这一点,并且到处都有这样的解释,例如想象有一个抽象类人,然后有它的子类disablednot disabled,那么,人类walking()中的抽象函数将包含不同的正文或代码。现在,我要说的是为什么我们不只在禁用的子类中创建一个函数,而不是在禁用的子类中创建一个函数,而不是重写。因此,再次回到第一段中的问题。请解释一下。

java inheritance multiple-inheritance
4个回答
3
投票

基本类型中的抽象方法定义是一种契约,它保证该类型的每个具体实现都将具有该方法的实现。

没有它,编译器将不允许您在基本类型的引用上调用该方法,因为它不能保证这样的方法将一直存在。

如果有的话

MyBaseClass x = getAnInstance();
x.doTheThing();

MyBaseClass 没有有一个doTheThing方法,然后编译器会告诉您它不允许您这样做。通过添加abstract doTheThing方法,可以保证getAnInstance()可以返回的每个具体实现都有一个实现,对于编译器来说已经足够好了,因此让您调用该方法。

基本上是一个更基本的事实,首先要弄明白的是:

您将遇到实例,其中变量的类型比其持有的值的类型更笼统] >>。在简单的情况下,您可以使变量成为特定类型:

MyDerivedClassA a = new MyDerivcedClassA();

在那种情况下,您显然可以调用MyDerivedClassA的任何方法,并且在基类中不需要任何抽象方法。

但是有时候您想对any

MyBaseClass实例执行操作,而您[[不知道它是什么具体类型:public void doTheThingsForAll(Collection<? extends MyBaseClass> baseClassReferences) { for (MyBaseClass myBaseReference : baseClassReferences) { myBaseReference.doTheThing(); } }
如果您的MyBaseClass没有抽象方法doTheThing,那么编译器将不允许您这样做。

1
投票
抽象方法最明显的用途之一是让抽象类从其他方法的实现中调用它们。

0
投票
要继续您的示例,有时您可能会有一个人类列表,并且您并不真正在乎他们是否被禁用,您所关心的只是您想在他们身上调用walking()方法。为此,Human类需要定义walking()方法。但是,您可能不知道人类是否残废,不知道如何实现。因此,您将实现留给继承的类。

0
投票
有一些

how

© www.soinside.com 2019 - 2024. All rights reserved.