2016-11-16 113 views
1

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

所以我認爲,

繼承:我們需要重寫子類中的方法

抽象類:在方法名把抽象的關鍵詞,需要實現方法子類

所以繼承和抽象類是一樣的不管抽象關鍵字因此,我們可以使用繼承來實現抽象類,這裏只是方法簽名更改類(這是我的信念)。

有什麼重要區別?

+0

對不起,我忘了提到抽象類,在這裏我將講述抽象類和繼承之間的主要區別 –

回答

1

通過繼承,您不需要重寫方法。在不覆蓋getROIChild的情況下,您仍然可以撥打new Child().getROI()並獲得0作爲響應。

如果另一方面一個方法是抽象的,它將需要由孩子實現,因爲沒有默認實現。

3

繼承是用於繼承屬性,並有一些屬性。

摘要是限制被實例化。

例如:
讓我們帶車輛和車輛部分。但汽車本身是非常抽象的,並不完整。所以我們想要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這樣的屬性。重寫是可選的。像RacingCar一樣可以覆蓋Car的方法並使其有點自定義。但基本上它從基類獲得(繼承)一些屬性。就像一輛汽車的所有基本屬性都在Car中,而不是在RacingCar中。 RacingCar將具有特定的屬性。


抽象類:放入方法名抽象的關鍵詞,需要 實現子類

都能跟得上的方法。這只是限制其實例化。例如。我們不想實例化Vehicle對象,因爲它沒有意義。車輛必須是汽車,公共汽車等等。它不能只是一輛車。所以我們把抽象和限制實例化。

0

抽象類意味着你不能直接實例化它。

new Parent() 

是不允許的。

抽象方法需要在擴展類中實現。