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

时间:2016-11-16 08:00:56

标签: java oop inheritance abstract-class abstraction

我知道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关键字,需要在子类中实现该方法

因此,无论抽象关键字

,继承和抽象类都是相同的

所以我们可以使用继承来实现抽象类,这里只是方法签名更改类(这是我的信念)。

有没有显着差异?

5 个答案:

答案 0 :(得分:4)

继承用于继承属性并具有一些属性。

摘要是限制实例化。

示例:
让我们参加Vehicle和VehiclePart。但车辆本身非常抽象而且不完整。所以我们想要Vehicle类抽象,因为我们不想直接实例化它。汽车是比汽车更有意义的实体,汽车是汽车。所以汽车延伸车辆并不是抽象的。

Sql("DROP TABLE Badger");
  

继承:我们需要覆盖子类

中的方法

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


  

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

不。它只是限制其实例化。例如。我们不想实例化Vehicle对象,因为它没有任何意义。车辆必须是汽车,公共汽车等等。它不仅仅是一辆车。所以我们把抽象和限制实例化。

答案 1 :(得分:1)

通过继承,您不需要覆盖方法。如果不在getROI覆盖Child,您仍然可以致电new Child().getROI()并获取0作为回复。

另一方面,如果方法是抽象的,则需要由子实现,因为没有默认实现。

答案 2 :(得分:0)

抽象类意味着您可以直接实例化它。

dfn

是不允许的。

需要在扩展类中实现抽象方法。

答案 3 :(得分:0)

在Java 8之后,您可以在Interface中使用静态方法和默认方法。因此它使接口与抽象类非常相似。

但是抽象类仍然是类,因此我们可以使用构造函数,实例变量, 使用getter和setter更改对象的状态。接口未提供所有这些功能。这是Java 8之后接口和抽象类之间的主要区别。

答案 4 :(得分:0)

抽象类:

  • 抽象隐藏了实现细节,只向用户展示了功能。
  • 抽象有助于降低代码的复杂性。
  • 我们无法创建抽象类的对象。

继承:

  • 继承是使用现有类的属性和方法创建新类的方法。
  • 继承有助于提高代码的可重用性。
  • 我们可以创建父类的对象。