当前位置: 首页 > 知识库问答 >
问题:

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

尚楚
2023-03-14

我知道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

所以我想,,

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

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

所以不管抽象关键字是什么,继承和抽象类都是相同的

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

有什么显著差异吗?

共有3个答案

毛镜
2023-03-14

抽象类意味着不能直接实例化它。

new Parent()

这是不允许的。

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

唐炜
2023-03-14

使用继承,您不需要重写方法。如果不重写Child中的getROI,您仍然可以调用newchild()。getROI()并获取0作为响应。

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

顾兴昌
2023-03-14

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

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

示例:
让我们以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;
}

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

不。在上面的示例中,您可以看到Car从Vehicle继承了类似name的属性。重写是可选的。像RacingCar一样,它可以覆盖Car的方法,并使其有点定制。但基本上它是从基类获取(继承)一些属性。就像汽车的所有基本特性一样,它将在汽车中而不是在赛车中。RacingCar将具有特定于它的属性。

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

不。这只是为了限制它的实例化。我们不想实例化Vehicle对象,因为它没有任何意义。车辆必须是类似汽车、公共汽车等的东西。它不能只是一辆车。因此,我们将抽象和限制实例化。

 类似资料:
  • 问题内容: 通过使用抽象类,我们可以实现与接口相同的功能,那么为什么Java不允许以下代码? 我知道可以通过仅使用接口来实现多重继承,但是上面的代码与接口所做的事情相同。 问题答案: 不允许这样做,因为您可以对抽象类做更多的事情。允许多重继承是没有意义的,前提是您只在可以使用接口的情况下才使用抽象类。 仅将抽象类用于无法通过接口执行的操作会更简单,在这种情况下,您将无法使用两个抽象父类。 注意:使

  • 本文向大家介绍接口和抽象类的区别是什么?相关面试题,主要包含被问及接口和抽象类的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:抽象类 Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于: 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。 类可以实现很多个接口,但是只能继承一个抽象类 类可以不实现抽象类和接口声明的所有方法,当然,在这种情

  • 本文向大家介绍抽象类和接口的区别是什么?相关面试题,主要包含被问及抽象类和接口的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。 构造函数:抽象类可以有构造函数;接口不能有。 实现数量:类可以实现很多个接口;但只能继承一个抽象类【java只支持单继承】。 访问修饰符:接口中的方法默认使用 pub

  • 继承一个可以实现的普通超类有什么不同吗? atm我有一个名为的抽象类,我有/扩展这个。 abstractcar中的一个字段设置为"私有int容量" 但是在子类“小型汽车”中,当我输入“容量”作为构造函数中使用的变量时,它说“容量在抽象汽车中有私有访问” 我想: > 子类继承超类的所有字段和方法? 我现在该怎么进行?

  • 我有一个抽象类,这个类是在她的子类中扩展的: < li >我在这个抽象类上实现了一个方法,并抽象了另一个方法 < li >实现的方法是每个子类对象都必须访问的通用方法。所以我决定在抽象类上实现它,避免在每个子类上实现相同的方法。 小例子: 我想听听你对这种实施方式的看法, 问候。

  • 问题内容: 我可以以某种方式在抽象类上对一组注释进行分组,并且扩展该类的每个类都已自动分配了这些注释? 至少以下情况不起作用: 问题答案: 答案是不 除非注释类型具有@Inherited元注释,否则不会继承Java注释:https : //docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html。 Spring的注释