vin*_*tox 1 java oop hashmap abstract
我有一个类组件
abstract class Component{
private componentType m_type;
public Component(componentType type)
{
m_type = type;
}
}
Run Code Online (Sandbox Code Playgroud)
和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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:1.i无法实例化任何类型的组件,因为m_type不可见(这意味着什么?)
2.i需要创建用户已插入链的所有组件的数组.我无法创建一个Component类数组.
有人可以帮我设计吗?
或者有一些解决方法?
提前致谢
我不明白为什么你需要类型成员.这看起来多余.你可以简单地做:
abstract class Component{
}
class AttenuatorComponent extends Component{
public AttenuatorComponent() {
// calls the default super constructor
}
}
Run Code Online (Sandbox Code Playgroud)
并依赖于类的多态性来表现得恰当.在声明相应的类时,不需要具有类型成员来标识层次结构类型.如果你确实有一个成员变量需要在子类中可见而不是客户端,那么你可以protected而不是private.
Component 如果没有与之关联的功能/数据,它可以是一个接口.
你的数组声明看起来像
Component[] components = new Component[20];
components[0] = new AttenuatorComponent();
Run Code Online (Sandbox Code Playgroud)
多态性意味着您可以遍历此组件数组,调用在(但不一定由其实现)上声明的适当方法Component,并且将调用合适的子类方法.