我试图创建一些Java类,其中有一些共享方法,还有一些其他方法仅适用于其中一些类(并且每个方法都应该是不同的)。
我做了一些研究,我发现我可以用default
方法开发一个Interface
,也可以用abstract
方法开发一个abstract
类。
我的问题是我想在使用类时使那些未实现的方法不可用。我看到了这个答案,但我认为为未实现的方法抛出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";
}
}
B类:
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
没有建议/可用。
我不知道这是否可能。我也尝试过default
接口方法,但没有成功。我不确定这是否是一个分层问题(也许我应该实现不同的类并扩展其他限制方法可见性的类),但对我来说似乎有点奇怪,没有太多的类/接口就不存在这样做的方法。
来了,我为你准备了一个小样本。
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() {}
}