不实现抽象类中的方法(并使其不可访问)



我试图创建一些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() {}
}

最新更新