首页 > 解决方案 > 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()方法的实现。但是开发者应该知道哪些类实现了这个接口以及这些类的用途。那么这里的“隐藏实现”到底是什么意思呢?谁能解释一下?

标签: javaoopabstract-classabstraction

解决方案


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

例如,在您上面的示例中:

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()方法签名,它不关心它是如何在test2test3类中实现的。将来,如果有一些可用的 test4 实现,可以在DependentClass.

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

推荐阅读