我知道 OOP 概念的基础[继承、抽象、封装、多态]
我们在父子关系的情况下使用 继承[孩子可以拥有父母拥有的所有功能,也可以为自己添加更多功能]
并且我们使用 抽象类(在java中)作为类中方法的部分默认实现集,也可以通过简单的继承来实现。
请看下面的示例,这使我的观点很清楚。
遗产:
家长班
public class Parent {
// This method will remain same for all child classes.No need to override
public void abc() {
System.out.println("Parent here");
}
// This methods need to be overridden from child class
public int getROI() {
return 0;
}
}
儿童班
public class Child extends Parent{
@Override
public int getROI(){
return 5;
}
public static void main(String[] args) {
Child child =new Child();
child.abc();
System.out.println(child.getROI());
}
}
抽象类:
家长班
abstract class Parent {
// This method will remain same for all child classes.No need to override
public void abc() {
System.out.println("Parent here");
}
// This methods need to be implemented from child class
public abstract int getROI();
}
儿童班
public class Child extends Parent{
public int getROI(){
return 5;
}
public static void main(String[] args) {
Child child =new Child();
child.abc();
System.out.println(child.getROI());
}
}
对于上述程序,o/p 将相同。
O/P:
Parent here
5
所以我认为,
继承: 我们需要覆盖子类中的方法
抽象类: 将abstract关键字放在方法名中,需要在子类中实现该方法
因此, 无论抽象关键字如何, 继承和抽象类都是相同的
所以我们可以使用继承来实现抽象类,这里只是方法签名更改类(这是我的信念)。
有什么显着差异吗?
原文由 Pratik Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议
继承 是为了继承属性并拥有一些自己的属性。
抽象 是为了限制被实例化。
例子:
让我们来看看 Vehicle 和 VehiclePart。但是 Vehicle 本身非常抽象且不完整。所以我们想要 Vehicle 类抽象,因为我们不想直接实例化它。 Car 是比 Vehicle 更有意义的实体,car 是 Vehicle。所以 car 扩展了 vehicle 并且它不是抽象的。
没有。在上面的示例中,您可以看到 Car 正在从 Vehicle 继承名称等属性。覆盖是可选的。就像 RacingCar 可以覆盖 Car 的方法并使其有点自定义。但基本上它是从基类获取(继承)一些属性。就像汽车的所有基本属性都在 Car 而不是 RacingCar 中一样。 RacingCar 将具有特定于它的属性。
没有。它只是为了限制它的实例化。例如。我们不想实例化 Vehicle 对象,因为它没有任何意义。交通工具必须是汽车、公共汽车等。它不能只是交通工具。所以我们把抽象和限制实例化。