抽象如何帮助隐藏 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 的功能实现。希望这能消除您的疑虑。
抽象是隐藏实现细节并仅向用户显示功能的过程。
另一种方式,它只向用户显示重要的事情并隐藏内部细节。 因此,下面是一个创建抽象 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
.
当客户端必须使用你的对象时,客户端不需要导入你的class或者在他的jar中有你的class定义,he/she可以只导入抽象class 或接口并接受您的对象作为参数,如银行示例中所述。因此,客户端仍然可以使用您的对象和父引用,但实际上看不到(或不需要)class 的功能实现。希望这能消除您的疑虑。