抽象如何帮助隐藏 Java 中的实现细节?

How does abstraction help in hiding the implementation details in Java?

抽象是隐藏实现细节并仅向用户显示功能的过程。

另一种方式,它只向用户显示重要的事情并隐藏内部细节。 因此,下面是一个创建抽象 class 并覆盖抽象方法的示例。但我不明白的是它是如何隐藏实现细节的?

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()+" %");    
 }
 }     

您代码中的抽象是抽象class本身:

abstract class Bank {    
   abstract int getRateOfInterest();    
} 

剩下的就是实现(和实现细节),具体来说:classes PNB and SBI

But the thing i didn't understand is how it is hiding the implementation details?

假设您有一个银行比较引擎,它由 BankComparisonEngine class 表示。它只会将 Bank (abstract class) 作为参数,然后获取其利率并将其保存到其内部数据库中,如下所示:

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

实施细节究竟是如何隐藏的?好吧,BankComparisonEngine 不知道 Bank 的具体实现的 getRateOfInterest() 方法是如何工作的(即: PNB.getRateOfInterest()SBI.getRateOfInterest() 是如何实现的)。它只知道它是一种 return 是 int 的方法(并且它应该 return 是利率)。 实现细节隐藏在扩展abstract class Bank.

的具体classes中

当客户端必须使用你的对象时,客户端不需要导入你的class或者在他的jar中有你的class定义,he/she可以只导入抽象class 或接口并接受您的对象作为参数,如银行示例中所述。因此,客户端仍然可以使用您的对象和父引用,但实际上看不到(或不需要)class 的功能实现。希望这能消除您的疑虑。