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

Pra*_*tel 5 java oop inheritance abstract-class abstraction

我了解OOP概念的基础知识[继承,抽象,封装,多态]

我们在父子关系的情况下使用继承 [子级可以具有父级具有的所有功能,也可以为其自身添加更多功能]

并且我们将Abstract类(在Java中)用于类中方法的部分默认实现集,这也可以通过简单的Inheritance实现。

看下面的例子,这使我的观点清楚。

遗产:

家长班

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

儿童班

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

抽象类:

家长班

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();
}
Run Code Online (Sandbox Code Playgroud)

儿童班

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

对于上述程序,o / p将相同。

O/P:    
Parent here
5
Run Code Online (Sandbox Code Playgroud)

所以我认为,

继承:我们需要重写子类中的方法

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

因此,无论抽象关键字如何,继承和抽象类都是相同

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

有什么显着差异吗?

pre*_*mar 6

继承用于继承属性并具有其自身的一些属性。

抽象是限制实例化。

示例:
让我们接受Vehicle和VehiclePart。但是,车辆本身是非常抽象且不完整的。所以我们想要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;
}
Run Code Online (Sandbox Code Playgroud)

继承:我们需要重写子类中的方法

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


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

不。只是为了限制其实例化。例如。我们不想实例化Vehicle对象,因为它没有意义。车辆必须是诸如汽车,公共汽车等之类的东西。它不能仅仅是车辆。因此,我们放置抽象并限制实例化。


Thi*_*ter 1

通过继承,您不需要重写方法。如果不重写,getROIChild仍然可以调用new Child().getROI()并获得0响应。

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