2017-09-04 5 views
0

抽象化は、実装の詳細を隠し、機能のみをユーザーに示すプロセスです。抽象化はJavaで実装の詳細を隠すのにどのように役立ちますか?

別の方法では、ユーザーにとって重要なことだけを表示し、内部の詳細を非表示にします。 以下は、抽象クラスが作成され、抽象メソッドがオーバーライドされる例です。しかし、私が理解していないことは、実装の詳細を隠す方法です。

abstract class Bank 
{  
    abstract int getRateOfInterest();  
} 

class SBI extends Bank 
{  
int getRateOfInterest() 
    { 
    return 7; 
    }  
    } 

class PNB extends Bank 
{  
int getRateOfInterest() 
    { 
    return 8; 
    }  
}  

class TestBank{  
public static void main(String args[]) 
{  
Bank b; 
b=new SBI(); 
System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");  
b=new PNB(); 
System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");  
} 
}  
+0

[抽象VS情報隠蔽VSカプセル化]の可能な複製(https://stackoverflow.com/questions/24626/abstraction-vs-information-hiding-vs-encapsulation) – RafatMunshi

答えて

1

あなたのコード内の抽象は抽象クラス自体です:

abstract class Bank {  
    abstract int getRateOfInterest();  
} 

、残りは具体的には、実装(および実装の詳細)である:クラスPNBSBI

しかし、私が理解できなかったことは、それがどのようにimpを隠しているか弛緩の詳細?

BankComparisonEngineクラスで表される銀行比較エンジンがあるとします。それはちょうど引数としてBank抽象クラスを)取る、その金利を取得し、これと同様に、その内部データベースに保存します。実装の詳細が正確に隠されている方法

class BankComparisonEngine { 
    public void saveInterestRateOf(Bank bank) { 
    int rate = bank.getRateOfInterest(); 
    // Save it somwehere to reuse later 
    } 
} 

?さて、BankComparisonEngineBankの具体的な実装方法(つまり、PNB.getRateOfInterest()またはSBI.getRateOfInterest()が実装されている方法)をgetRateOfInterest()の方法で知りません。これは、intを返すメソッドであることがわかっています(金利を返す必要があります)。 実装の詳細は、abstract class Bankを拡張する具象クラスの内側に隠されています。

+0

また、インポートされたライブラリオブジェクトと彼らのメソッドは、私たちはそれらのメソッドの実装について心配しないでください、我々はちょうど使用する機能を持っています。したがって、OOPによって、内部の詳細なしで重要なことが得られます。それは抽象です! – RafatMunshi

関連する問題