抽象类数组和oop设计 - Java

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类数组.

有人可以帮我设计吗?
或者有一些解决方法?

提前致谢

Bri*_*new 6

我不明白为什么你需要类型成员.这看起来多余.你可以简单地做:

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,并且将调用合适的子类方法.