我正在尝试创建一些Java类,这些Java类之间具有某些共享方法,而另一些仅适用于其中一些类的方法(并且这些方法中的每一个都应该是不同的)。
我做了一些研究,发现可以使用Interface
方法开发default
或使用abstract
方法开发abstract
类。
我的问题是我想使那些未实现的方法在使用类时不可用。我看到了这个answer,但我认为为未实现的方法抛出Exception
有点过分。下面是我正在测试的代码。
可用方法:
public abstract class AvailableMethods {
// This is the shared method
void methodOne(){
System.out.println("Common method implementation");
}
// This should always be implemented and have always different logic
abstract int methodTwo();
/* This should be only implemented in some cases and when not
implemented it should not be visible while using the class */
abstract String methodThree();
}
A级:
public class ClassA extends AvailableMethods {
@Override
public int methodTwo() {
return 123;
}
@Override
public String methodThree() {
return "test";
}
}
ClassB:
public class ClassB extends AvailableMethods {
@Override
public int methodTwo() {
return 456;
}
// I was trying to get rid of this implementation without defining a default value
@Override
public String methodThree() {
return null;
}
}
测试:
public class Test {
public static void main(String[] args){
ClassA a = new ClassA();
ClassB b = new ClassB();
b.methodOne();
b.methodTwo();
}
}
基本上我想要实现的是在我的IDE中键入b.
时不建议/不可用。
我不知道是否有可能。我还尝试了methodThree
接口方法,但没有成功。我不确定这是否是一个分层问题(也许我应该实现不同的类,并从其他类中扩展类,从而限制了方法的可见性),但是对于我而言,如果没有太多的类/接口,就没有一种实现方法,这似乎有些奇怪
答案 0 :(得分:0)
在这里,我为您准备了一个小样本。
public class Example {
public static void main(){
ClassA a = new ClassA();
a.methodOne();
a.methodTwo();
a.methodThree();
ClassB b = new ClassB();
b.methodOne();
b.methodTwo();
}
}
interface One {
default void methodOne(){
System.out.println("Common method implementation");
}
}
abstract class Two implements One {
public abstract void methodTwo();
}
interface Three {
void methodThree();
}
class ClassA extends Two implements Three{
public void methodTwo() {}
@Override
public void methodThree() {}
}
class ClassB extends Two {
public void methodTwo() {}
}