使用封装时是否有一些技巧可以共享方法行为?
is there some trick to share methods behavior while using encapsulation?
我得到了这个 class 结构:
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() 将实现完全相同的功能(可以包含几行代码)。
目前我被迫以相同的方式复制行为。
我无法创建另一个 class 来实现该行为,因为它访问受保护的方法。
有什么解决办法吗?
如果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"; }
}
我得到了这个 class 结构:
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() 将实现完全相同的功能(可以包含几行代码)。
目前我被迫以相同的方式复制行为。
我无法创建另一个 class 来实现该行为,因为它访问受保护的方法。
有什么解决办法吗?
如果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"; }
}