我有一个抽象的超类。一些方法在抽象类中实现。在我的子类中,我需要覆盖已实现的方法。子类中的方法与超类完全相同。
public abstract class vehicle {
public int getNumber() {
return 5;
}
}
public class car {
public int getNumber() {
return super.getNumber();
}
}
所以我的问题是,我是否需要覆盖该方法并包含超级调用?或者我可以将它留在超类中,而不是在子类中实现它?
答案 0 :(得分:2)
您可以将其保留在超类中,而不是在子类中实现它。
调用
car BMW = new car();
BMW.getNumber();
应该抓住超类方法。
答案 1 :(得分:2)
不,你没有。你可以把它留在超级(父)类中,而不是实现它。
原因
基本上抽象类背后的想法(非常简短)是你可以写下所有具体类派生自抽象类的常见实现,然后不必再次覆盖或重写它们。
在你的情况下的一个例子是,如果所有车辆都有一个数字,它是一个共同的属性,那么为从该类派生的每个类编写相同的getNumber()方法没有意义。抽象车辆类似于各种各样的“框架”,从车辆类派生的具体类(汽车,公共汽车,货车)是您实例化的实际类。在这个课程中你可以有更专业的变量和方法,(汽车是2轮还是4轮?卡车可能不需要那种方法)
此SO问题的相关读物:Purpose of Abstract Classes
简而言之,抽象类的优点在于您不必具体(lol)关于每个细节,但是您可以使用一种方法跨越所有公共类,并在它们是特殊情况时覆盖它们。这也有助于维护代码(在所有类中共享的常见方法中的错误只需要在抽象类中进行更改而不是所有具体类)
其他信息
正如附加信息一样,如果你确实使用了接口而不是抽象类,那么你必须覆盖那里的每个方法,因为接口不包含实现,只包含设计。 This link helped explain things to me last time.
您可能还想了解所有面向对象编程(OOP)语言中的多态性和继承这些重要概念。 :)
注意:另外,既然我不能对你的问题发表评论(不够代表),但是已经潜伏在足够长的时间,不要被挫折沮丧,很多人在这里假设您有正确的关键字也可以在StackOverflow上搜索以获得您想要的答案,但情况并非总是如此。祝你好运!