我有一个类组件
abstract class Component{
private componentType m_type;
public Component(componentType type)
{
m_type = type;
}
}
和2个子类
class AmplifierComponent extends Component{
public AmplifierComponent()
{
super(componentType.Amp);
System.out.print(this.m_type);
}
}
class AttenuatorComponent extends Component{
public AttenuatorComponent()
{
super(componentType.Att);
System.out.print(this.m_type);
}
}
我的问题是:
1.我无法实例化任何类型的组件,因为 m_type 不可见(这是什么意思?)
2.我需要制作一个用户插入到链中的所有组件的数组。我无法创建一个组件类数组。
谁能帮我设计一下?
或者有一些解决方法?
提前致谢
最佳答案
我不明白你为什么需要类型成员。这看起来多余。你可以简单地做:
abstract class Component{
}
class AttenuatorComponent extends Component{
public AttenuatorComponent() {
// calls the default super constructor
}
}
并依赖polymorphism让你的类(class)表现得恰到好处。当您声明了相应的类时,不需要使用类型成员来标识层次结构类型。如果您确实有一个成员变量需要在子类中可见但对客户端不可见,那么您可以将其设为 protected
而不是 private
。
Component
如果没有关联的功能/数据,则可以是一个接口(interface)。
你的数组声明看起来像
Component[] components = new Component[20];
components[0] = new AttenuatorComponent();
多态性意味着您可以遍历此组件数组,调用在 Component
上声明(但不一定由其实现)的适当方法,并将调用适当的子类方法。
关于java - 抽象类数组和 oop 设计 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877298/