java抽象如何在实时项目中工作
为了理解抽象概念,我阅读了许多文章。他们中的大多数人都将抽象定义为对使用方法的代码隐藏实现 范例java抽象如何在实时项目中工作,java,oop,abstract-class,abstraction,Java,Oop,Abstract Class,Abstraction,为了理解抽象概念,我阅读了许多文章。他们中的大多数人都将抽象定义为对使用方法的代码隐藏实现 范例 public interface test1 { String doSomething(); } public class test2 implements test1 { String doSomething() { } } public class test3 { void m1() { test1 t = new test2();
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()
方法的实现。但是开发人员应该知道哪些类实现了这个接口以及这些类的用途。那么“隐藏实现”在这里到底意味着什么呢?。有人能解释一下吗?当您谈到实际示例时,没有人知道java api中所有类的hashCode()函数是如何实现的。但你们知道那个函数的效用是什么
这里的要点是,使用hashCode()的人,不必担心它的实现细节,也不必担心对发行版所做的兼容更改,只要它合适,他就可以使用它
在互联网上也可以找到很好的解释。抽象不是关于隐藏实现细节,而是关于事物如何工作的更高层次的概念
例如,在上面的示例中:
公共接口测试1{
字符串doSomething();
}
公共类test2实现test1{
字符串doSomething(){
}
}
公共类test3{
void m1(){
test1t=newtest2();
t、 doSomething();
}
}
如果某个其他类依赖于某个测试功能,则该类可以在构造函数中包含它,如:DependentClass(test1 test)
an您可以将其作为DependentClass(newtest2())
或DependentClass(newtest3())
传递。DependentClass
的内部实现只能看到doSomething()
方法签名,它不关心它在test2
或test3
类中是如何实现的。
将来,如果有一些test4实现可用,则可以在DependentClass
的实现中使用它,而无需更改任何单词
doSomething()
的实现对DependentClass
是隐藏的(它可能使用一些实现类的私有方法,这些方法在DependentClass
中是不可访问的),但同样,这不是抽象的意义所在hashCode()不是抽象的。我在解释概念而不是关键我在解释抽象的概念而不是keyword@Omid.N但是
hashCode()
是“虚拟的”,很多类都会覆盖它。@asvni但我不同意。抽象是一个继承概念。不管你是否看到代码。抽象这个词的意思是“一般的”。当你把一个类抽象化时,你的意思是这个类是“原始的”,用它的子类来代替;它还有一个特定的其他含义。