我知道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
所以我想,,
继承:我们需要重写子类中的方法
抽象类:在方法名中放入抽象关键字,需要在子类中实现方法
所以不管抽象关键字是什么,继承和抽象类都是相同的
所以我们可以使用继承来实现抽象类,这里只是方法签名更改类(这是我的信念)。
有什么显著差异吗?
抽象类意味着不能直接实例化它。
new Parent()
这是不允许的。
抽象方法需要在扩展类中实现。
使用继承,您不需要重写方法。如果不重写Child
中的getROI
,您仍然可以调用newchild()。getROI()
并获取0
作为响应。
另一方面,如果一个方法是抽象的,它将需要由子实现,因为没有默认实现。
继承是为了继承属性并拥有自己的一些属性。
抽象是为了限制被实例化。
示例:
让我们以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的注释