最近我一直在研究抽象方法,我不明白为什么我们需要它们?我的意思是毕竟我们只是压倒它们。您知道它只是一个声明吗?我们为什么需要它们?
我还尝试从互联网上理解这一点,并且到处都有这样的解释,例如想象有一个抽象类人,然后有它的子类disabled和not disabled,那么,人类walking()
中的抽象函数将包含不同的正文或代码。现在,我要说的是为什么我们不只在禁用的子类中创建一个函数,而不是在禁用的子类中创建一个函数,而不是重写。因此,再次回到第一段中的问题。请解释一下。
基本类型中的抽象方法定义是一种契约,它保证该类型的每个具体实现都将具有该方法的实现。
没有它,编译器将不允许您在基本类型的引用上调用该方法,因为它不能保证这样的方法将一直存在。
如果有的话
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
,那么编译器将不允许您这样做。
how