根据我的了解,我想强制一个类使用特定的私有字段(和方法)。我需要一个抽象类,因为接口只声明公共/静态/最终字段和方法。正确吗?
我刚开始我的第一个大型java项目,想确保以后不会给自己带来麻烦 :)
根据我的了解,我想强制一个类使用特定的私有字段(和方法)。我需要一个抽象类,因为接口只声明公共/静态/最终字段和方法。正确吗?
我刚开始我的第一个大型java项目,想确保以后不会给自己带来麻烦 :)
您不希望强制使用某些私有字段或方法。一般来说,您并不关心实现细节,而是关心接口。因此,请在几个接口中定义一些方法(取决于您需要多少),并定义实现它们的类。这可能会对您未来造成最小的影响。
通常情况下会提供两者,以便最终得到:
public interface Sendable {
public void sendMe();
}
和
public abstract class AbstractSender implements Sendable {
public abstract void send();
public void sendMe() {
send(this.toString());
}
}
这样,任何对抽象类中默认实现满意的人可以快速地继承它而无需重写很多代码,但是任何需要做一些更复杂的事情(或需要继承自不同基类)的人仍然可以实现该接口并进行插拔式开发。
私有字段和方法不能被子类使用(除非它们也是内部类)。但您可以将它们设为受保护的。
这是正确的。但这不一定是一个非此即彼的决定,您可以通过提供骨架实现来结合接口和抽象类的优点。您可以在《Effective Java, 2nd Ed.》的第18项(“优先使用接口而不是抽象类”)中找到对这种方法的非常有趣的描述。
没错。接口是为公共使用而设计的。而私有实现需要在抽象(或具体)类中。
接口定义行为规范,而不是属性。