gpt4 book ai didi

java - 提示: wrapping class in java in order to add new methods

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:24 24 4
gpt4 key购买 nike

我想问你一些关于这个java场景的提示:我有一个名为 Sequence 的简单接口(interface),它执行一些基本操作。现在我想在一个名为 SequenceWrapper 的单独类中实现一些附加方法,该类实现上面定义的 Sequence。下面是一些示例代码,看起来像我的真实代码:

public interface Sequence {       
public void methodOne();
public int methodTwo();
}

public abstract class SequenceWrapper implements Sequence {
private wrappedSequence = null;

public SequenceWrapper(Sequence sequence){
this.wrappedSequence = sequence;
}

public void methodOne(){
wrappedSequence.methodOne();
}

public int methodTwo(){
return wrappedSequence.methodTwo();
}
}

public class ConcreteWrapper extends SequenceWrapper {
public ConcreteWrapper(Sequence sequence){
super(sequence);
}

// Just an example
public int addMethodOne(){
int a = super.methodTwo();
return a + 3;
}
}

现在,如果我想用另一种方法实现一个类(例如“addMethodTwo()”),我可以简单地扩展“ConcreteWrapper”类并仅添加新方法:

public class ConcreteWrapperTwo extends ConcreteWrapper {
public ConcreteWrapperTwo(Sequence sequence){
super(sequence);
}

public int addMethodTwo(){
int a = super.methodTwo();
return a + 30;
}
}

你觉得怎么样?此代码正确还是最好采用其他策略?

提前致谢

最佳答案

  • 首先,您的 privatewrappedSequence = null; 没有类型。我想你的意思是 private SequencewrappedSequence = null;

  • 其次,在您的示例中,您将永远无法实例化任何类,因为所有类都在构造函数中接收另一个 Sequence,并且无法创建 Sequence 的第一个实例。

  • 第三,如果您确实需要的话,组合优于继承是一个好方法。通常,当您需要隐藏或保护对包装对象的访问时,您会包装对象。在您的情况下,在包装器中您将公开被包装对象的所有方法。然后,您创建将影响包装器对象的新方法,但不会影响被包装的对象。

您可能需要的只是一个正常的继承场景:

我想向您详细介绍一下这个 Java 场景:我有一个名为 Sequence 的简单接口(interface),它执行一些基本操作。现在我想在一个名为 SequenceWrapper 的单独类中实现一些附加方法,该类实现了上面定义的 Sequence 。下面是一些示例代码来解释我的意思:

public interface Sequence {
public void methodOne();
public int methodTwo();
}

public abstract class AbstractSequence implements Sequence {


public SequenceWrapper( ){ }

public void methodOne(){
//basic behavior here
}

public int methodTwo(){
//basic behavior here

}
}

public class ConcreteSequence extends AbstractSequence {
public ConcreteSequence ( ){
super( );
}

// Just an example
public int addMethodOne(){
int a = methodTwo();
return a + 3;
}
}


public class ConcreteSequenceTwo extends AbstractSequence {
public ConcreteSequenceTwo( ){
super( );
}

public int addMethodTwo(){
int a = methodTwo();
return a + 30;
}
}

关于java - 提示: wrapping class in java in order to add new methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com