java - java抽象如何在实时项目中工作
问题描述
我阅读了很多文章来理解抽象概念。他们中的大多数都将抽象定义为对使用这些方法的代码隐藏实现。
例子
public interface test1 {
String doSomething();
}
public class test2 implements test1 {
String doSomething() {
}
}
public class test3 {
void m1() {
test1 t = new test2();
t.doSomething();
}
}
我的问题是,如果抽象隐藏了实现细节,test3
就不知道doSomething()
方法的实现。但是开发者应该知道哪些类实现了这个接口以及这些类的用途。那么这里的“隐藏实现”到底是什么意思呢?谁能解释一下?
解决方案
抽象不是关于隐藏实现细节,而是关于事物如何工作的更高层次的想法。
例如,在您上面的示例中:
public interface test1 {
String doSomething();
}
public class test2 implements test1 {
String doSomething() {
}
}
public class test3 {
void m1() {
test1 t = new test2();
t.doSomething();
}
}
如果某个其他类依赖于测试功能,则该类可以将它放在构造函数中,例如:DependentClass(test1 test)
您可以将其作为DependentClass(new test2())
or传递DependentClass(new test3())
。内部实现DependentClass
只能看到doSomething()
方法签名,它不关心它是如何在test2
或test3
类中实现的。将来,如果有一些可用的 test4 实现,可以在DependentClass
.
- 顺便说一句,您应该遵循 Java 命名约定
- 当有人使用隐藏一词时,通常他们谈论的是限制访问,即对程序的其他部分隐藏,而不是对开发人员隐藏。从这个意义上说,您可以说 的实现
doSomething()
是隐藏的DependentClass
(它可能使用了一些私有的实现类的方法,这些方法在 中是不可访问的DependentClass
),但同样,这不是抽象的重点。
推荐阅读
- ios - 我可以将 LocalizedStringKey 用于 UIKit 视图吗?
- elasticsearch - Elasticsearch 数组相交查询
- sql - SQL根据另一列是否具有相同的值在列中插入相同的值
- react-native - Catch 块没有捕捉到我的自定义反应钩子中抛出的错误
- javascript - 如何在角度 9 的 @syncfusion 时间表中调用具有选定日期的函数?
- javascript - 每个(var A in B)错误的javascript,B是一个数组数组
- ssis - SSIS - 控制打印到输出窗口的内容
- awk - 用'~'替换字符串
- json - Prime React Datatable 嵌套 JSON
- javascript - javascript中的动态JSON解析