我知道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关键字,需要在子类中实现该方法
因此,无论抽象关键字
,继承和抽象类都是相同的所以我们可以使用继承来实现抽象类,这里只是方法签名更改类(这是我的信念)。
有没有显着差异?
答案 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)
抽象类:
继承: