继承和抽象类之间的确切区别是什么?

新手上路,请多包涵

我知道 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 许可协议

阅读 375
1 个回答

继承 是为了继承属性并拥有一些自己的属性。

抽象 是为了限制被实例化。

例子:

让我们来看看 Vehicle 和 VehiclePart。但是 Vehicle 本身非常抽象且不完整。所以我们想要 Vehicle 类抽象,因为我们不想直接实例化它。 Car 是比 Vehicle 更有意义的实体,car 是 Vehicle。所以 car 扩展了 vehicle 并且它不是抽象的。

 abstract class Vehicle{
    String name;
}

abstract class VehiclePart{
    String name;
    Date expiry;
}

class Car extends Vehicle{
     List<VehicleParts> parts;
}

class RacingCar extends Vehicle{

}

class Gear extends VehiclePart{
   int numOfGears;
}

继承:我们需要覆盖子类中的方法

没有。在上面的示例中,您可以看到 Car 正在从 Vehicle 继承名称等属性。覆盖是可选的。就像 RacingCar 可以覆盖 Car 的方法并使其有点自定义。但基本上它是从基类获取(继承)一些属性。就像汽车的所有基本属性都在 Car 而不是 RacingCar 中一样。 RacingCar 将具有特定于它的属性。

抽象类:将abstract关键字放在方法名中,需要在子类中实现该方法

没有。它只是为了限制它的实例化。例如。我们不想实例化 Vehicle 对象,因为它没有任何意义。交通工具必须是汽车、公共汽车等。它不能只是交通工具。所以我们把抽象和限制实例化。

原文由 prem kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题