Java 实现继承没有父类或接口
我有以下两种方法:Java 实现继承没有父类或接口,java,inheritance,Java,Inheritance,我有以下两种方法: void m1(SourceClass s, ClassA a); void m2(SourceClass s, ClassB b); ClassA和ClassB实际上共享一些公共属性,但是,我们无法编写另一个父类&使ClassA和ClassB从父类继承,因为ClassA和ClassB不受我们的控制 问题:没有重复代码,如果类别A。。。否则如果B类。。。 为了达到编写继承的新父类的效果,处理这种情况的最佳方法是什么?谢谢。有一个非常好的设计模式可以解决: 将其他职责动态附
void m1(SourceClass s, ClassA a);
void m2(SourceClass s, ClassB b);
ClassA和ClassB实际上共享一些公共属性,但是,我们无法编写另一个父类&使ClassA和ClassB从父类继承,因为ClassA和ClassB不受我们的控制
问题:没有重复代码,如果类别A。。。否则如果B类。。。
为了达到编写继承的新父类的效果,处理这种情况的最佳方法是什么?谢谢。有一个非常好的设计模式可以解决:
- 将其他职责动态附加到对象。装饰器为扩展功能提供了一种灵活的子类化替代方法
- 客户端通过递归地包装核心对象来指定核心对象的修饰
- 包装礼物,把它放在盒子里,然后包装盒子
public class CommonSteps {
public void perform() {
System.out.println("common steps");
}
}
public class A{
private CommonSteps commonSteps;
public A(CommonSteps commonSteps) {
this.commonSteps = commonSteps;
}
public void action() {
System.out.println("some steps of class A");
commonSteps.perform();
System.out.println("some more steps of class A");
}
}
public class B{
private CommonSteps commonSteps;
public B(CommonSteps commonSteps) {
this.commonSteps = commonSteps;
}
public void action() {
System.out.println("some steps of class B");
commonSteps.perform();
System.out.println("some more steps of class B");
}
}
编辑: 以下是符合您要求的完整示例代码,包括步骤: 步骤: 创建具有公共方法签名的接口
包装器
interface Wrapper {
void setP1(String p1);
void setP2(String p2);
}
创建特定于类的包装器
接口实现
class ClassAWrapper implements Wrapper{
ClassA classA;
ClassAWrapper(ClassA classA){
this.classA = classA;
}
@Override
public void setP1(String p1)
{
classA.setP1(p1);
}
@Override
public void setP2(String p2)
{
classA.setP2(p2);
}
}
现在更改方法签名,如
void m(SourceClass s, Wrapper w) {
w.setP1(s.getP1());
w.setP2(s.getP2());
}
问题解决
**完整代码:
interface Wrapper {
void setP1(String p1);
void setP2(String p2);
}
class ClassAWrapper implements Wrapper{
ClassA classA;
ClassAWrapper(ClassA classA){
this.classA = classA;
}
@Override
public void setP1(String p1)
{
classA.setP1(p1);
}
@Override
public void setP2(String p2)
{
classA.setP2(p2);
}
}
class ClassBWrapper implements Wrapper{
ClassB classB;
ClassBWrapper(ClassB classB){
this.classB = classB;
}
@Override
public void setP1(String p1)
{
classB.setP1(p1);
}
@Override
public void setP2(String p2)
{
classB.setP2(p2);
}
}
class ClassA {
void setP1(String p1) {
System.out.println("ClassA - " + p1);
}
void setP2(String p2) {
System.out.println("ClassA - " + p2);
}
}
class ClassB {
void setP1(String p1) {
System.out.println("ClassB - " + p1);
}
void setP2(String p2) {
System.out.println("ClassB - " + p2);
}
}
class SourceClass {
String getP1() {
return "p1";
}
String getP2() {
return "p2";
}
}
void m(SourceClass s, Wrapper w) {
w.setP1(s.getP1());
w.setP2(s.getP2());
}
为什么不简单地测试一下
的instanceof
e、 g
谢谢你的回复。更清楚地说,我必须修改以下当前代码:void m1(SourceClass s,ClassA){a.setP1(s.getP1();a.setP2(s.getP2());}void m2(SourceClass s,ClassA b){b.setP1(s.getP1());b.setP2(s.getP2());}-->这里的要点是:我希望在不修改ClassA和ClassB签名的情况下消除重复代码。谢谢
void m (SourceClass s, Object a_or_b) {
if (a_or_b instanceof ClassA) {
// do blahA
}
if (a_or_b instanceof ClassB) {
// do blahB
}
}