抽象的基本定义隐藏了方法的实现复杂性并显示了功能。虽然在处理代码时(我使用eclipse时)可以选择打开抽象方法的实现。
例如: -
我试图打开BufferedReader
的实现能够看到许多实现。
因此,当我们能够看到实施时,我们如何隐藏复杂性。
我在概念上哪里出错?
答案 0 :(得分:1)
Abstaction并不意味着从实际上隐藏实现细节。除非您有所注意,否则您仍将看到实现抽象方法的所有实现行。抽象意味着隐藏实现细节,以及如何在其代码中使用该方法。
假设您正在编写近似于函数导数的类。哪个功能?如果你把一个函数想象成抽象,这没关系。 你不关心这个功能是什么。您只需定义如何实现该功能的一些基本原则。它应该是一个double值,它应该返回一个double值。
这个概念隐藏了你的功能实现复杂性,来自你的类设计师。您现在可以继续执行您的工作。您可以编写以下类:
public abstract class DerivativeApprox {
abstract double func(double x);
double eps = 0.0;
DerivativeApprox(double eps){
this.eps = eps;
}
public double eval(double xPoint){
return (func(xPoint + eps) - func(xPoint - eps)) / (2 * eps);
}
}
现在任何人都可以通过以下方式使用您的课程(负责实施他们想要估算衍生工具的任何特定功能)
public static void main(String[] args) {
DerivativeApprox cosDerApprox = new DerivativeApprox(0.0001) {
@Override
double func(double x) {
return Math.cos(x);
}
};
DerivativeApprox sinDerApprox = new DerivativeApprox(0.0001) {
@Override
double func(double x) {
return Math.sin(x);
}
};
System.out.println("Cos'(pi) = " + cosDerApprox.eval(Math.PI));
System.out.println("Cos'(pi/2) = " + cosDerApprox.eval(Math.PI / 2));
System.out.println("Sin'(pi) = " + sinDerApprox.eval(Math.PI));
System.out.println("Sin'(pi/2) = " + sinDerApprox.eval(Math.PI / 2));
}
希望这个解释能帮助ypu继续进行OOP学习。
答案 1 :(得分:0)
您的定义是正确的,抽象隐藏了方法的实现复杂性并显示了功能。但这只是编程中的一个概念。它不是用于隐藏类或模块的实现细节的技术。您可以访问Java库中的任何预定义方法或类并进行探索。
但抽象的优点是,我们可以在不了解其实现细节或内部结构的情况下使用类或方法。
假设您是第一次使用BufferedReader
课程。您只需要了解该类的功能(方法)。但是,您不需要研究这些方法的实施。这隐藏了用户的复杂性。他不需要意识到内部的复杂性。
希望这会对你有帮助....