Я пытался создать некоторые классы Java с некоторыми общими методами среди них и с некоторыми другими методами, доступными только для некоторых из этих классов (и каждый из этих методов должен быть различным).
Я провел некоторое исследование и обнаружил, что могу разработать Interface
с default
методами или abstract
класс с abstract
методами.
Моя проблема в том, что я хотел бы сделать эти нереализованные методы недоступными при использовании класса. Я видел этот ответ , но я думаю, что это немного излишне, бросать Exception
для неосуществленных методов. Ниже приведен код, который я тестировал.
AvailableMethods:
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();
}
ClassA:
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();
}
}
По сути, я хотел, чтобы при вводе b.
в моей IDE methodThree
не предлагалось / не было доступно.
Я не знаю, возможно ли это. Я также попробовал с default
методы интерфейса без успеха. Я не уверен, является ли это иерархической проблемой (может быть, мне следует реализовать разные классы и расширить те из них, которые ограничивают видимость методов), но мне кажется немного странным отсутствие существующего способа сделать это без слишком большого количества классов / интерфейсов .