在一个实时项目中,java抽象如何工作?

问题描述 投票:0回答:1

我翻阅了许多文章来理解抽象概念。大多数文章都将抽象定义为将实现从使用方法的代码中隐藏起来。

例子

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 oop abstract-class abstraction
1个回答
1
投票

正如你谈到的现实生活中的例子,没有人知道java api中所有类的hashCode()函数是如何实现的,但你知道这个函数的效用是什么。

这里的重点是,使用hashCode()的人,不要去管它的实现细节,也不要去管它在版本中的兼容变化,他可以在适合的情况下使用它。

另外在互联网上也可以找到很好的解释。


1
投票

抽象不是为了 躲藏 实现细节,它是关于事物如何工作的更高层次的想法。

例如,在你上面的例子中。

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())DependentClass(new test3()). 内部执行 DependentClass 只见 doSomething() 方法的签名,它并不关心它在任何一个 test2test3 类。将来,如果有一些test4的实现,可以在不改变一个字的情况下使用 DependentClass.

  1. 顺便说一下,你应该遵循Java的命名惯例。
  2. 当有人使用隐藏一词时,通常他们说的是限制访问,即对程序的其他部分进行隐藏,而不是对开发者进行隐藏。在这个意义上,你可以说,实现了 doSomething()隐蔽DependentClass (它可能使用了一些实现类的私有方法,这些方法在 DependentClass),但这又不是有抽象的意义。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.