Java 使用封装时是否有一些技巧来共享方法行为?
我得到了这个班级结构:Java 使用封装时是否有一些技巧来共享方法行为?,java,inheritance,encapsulation,Java,Inheritance,Encapsulation,我得到了这个班级结构: abstract class A{ protected void doTest(){}; abstract void test(); } abstract class B extends A{ } class C extends B{ public void test(){ doTest(); } } class D extends A{ public void test(){ doTest(); } } D无法扩展B。 两
abstract class A{
protected void doTest(){};
abstract void test();
}
abstract class B extends A{
}
class C extends B{
public void test(){
doTest();
}
}
class D extends A{
public void test(){
doTest();
}
}
D无法扩展B。两者中的test()将实现完全相同的功能(可以包含多行代码)。
目前,我被迫复制相同的行为。
我无法创建另一个类来实现该行为,因为它访问受保护的方法 有什么办法可以解决这个问题吗?如果
test()
确实是相同的,那么它就不应该是抽象的
abstract class A{
protected void doTest(){};
public void test() {
//Shared functionality calling doTest() and doing other stuff.
}
}
即使test()
依赖于不同子类中的字段,您也可以创建抽象getter并使用它们:
abstract class A{
protected void doTest(){};
protected abstract String getName();
public void test() {
//Shared functionality calling doTest() and doing other stuff.
//Can also use getName()
}
}
abstract class B extends A {}
class C extends B {
@Override public String getName() { return "C"; }
}
class D extends A {
@Override public String getName() { return "D"; }
}
如果test()
abstract class A{
protected void doTest(){};
public void test() {
//Shared functionality calling doTest() and doing other stuff.
}
}
即使test()
依赖于不同子类中的字段,您也可以创建抽象getter并使用它们:
abstract class A{
protected void doTest(){};
protected abstract String getName();
public void test() {
//Shared functionality calling doTest() and doing other stuff.
//Can also use getName()
}
}
abstract class B extends A {}
class C extends B {
@Override public String getName() { return "C"; }
}
class D extends A {
@Override public String getName() { return "D"; }
}
令人印象深刻的谢谢!这个问题我已经讨论了好几个月了:),直到今天我才知道该怎么回答这个问题,呵呵。。最后,我用抽象方法创建了另一个类E,它在A中使用。然后,我扩展了这样的类并实现了我真正需要的东西,它在C和D中都能完美地工作!!!令人印象深刻的谢谢!这个问题我已经讨论了好几个月了:),直到今天我才知道该怎么回答这个问题,呵呵。。最后,我用抽象方法创建了另一个类E,它在A中使用。然后,我扩展了这样的类并实现了我真正需要的东西,它在C和D中都能完美地工作!!!