2016-11-16 4 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()); 
    } 
} 

抽象クラス:

01上記プログラムのO/Pの

親クラス

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:  
Parent here 
5 

だから私は、

継承を考えます子クラス

したがって、抽象的なキーワードに関係なく、継承と抽象クラスは同じです

継承を使用して抽象クラスを実装することができます。ここでは、メソッドのシグネチャ変更クラス(これは私の考えです)です。

大きな違いはありますか?

+0

申し訳ありませんが、抽象クラスについて言及することを忘れてしまいました。ここでは、抽象クラスと継承の主な違いについて取り上げています。 –

答えて

1

継承を使用すると、メソッドをオーバーライドする必要はありません。 ChildgetROIを上書きしないでも、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のメソッドをオーバーライドして、少し慣れさせることができます。しかし基本的には、基本クラスからいくつかのプロパティを取得しています(継承しています)。車のすべての基本的なプロパティのように車ではなく、RacingCarになります。 RacingCarには固有のプロパティがあります。


抽象クラス:子クラス

ハズレでメソッドを実装するメソッド名で抽象的なキーワードを入れて する必要があります。インスタンス化を制限するだけです。例えば。意味がないので、Vehicleオブジェクトをインスタンス化したくありません。車は車、バスなどのようなものでなければなりません。車だけではありません。そこで抽象化し、インスタンス化を制限します。

0

抽象クラスは、インスタンスを直接インスタンス化できないことを意味します。

new Parent() 

は許可されません。

抽象メソッドは、拡張クラスで実装する必要があります。

関連する問題