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
的实现中使用它,而无需更改任何单词

  • 顺便说一下,您应该遵循Java命名约定
  • 当有人使用术语隐藏时,通常他们谈论的是限制访问,即隐藏程序的其他部分,而不是开发人员。在这个意义上,您可以说
    doSomething()
    的实现对
    DependentClass
    是隐藏的(它可能使用一些实现类的私有方法,这些方法在
    DependentClass
    中是不可访问的),但同样,这不是抽象的意义所在

  • hashCode()不是抽象的。我在解释概念而不是关键我在解释抽象的概念而不是keyword@Omid.N但是
    hashCode()
    是“虚拟的”,很多类都会覆盖它。@asvni但我不同意。抽象是一个继承概念。不管你是否看到代码。抽象这个词的意思是“一般的”。当你把一个类抽象化时,你的意思是这个类是“原始的”,用它的子类来代替;它还有一个特定的其他含义。