java - 抽象类数组和 oop 设计 - Java

标签 java oop hashmap abstract

我有一个类组件

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/

相关文章:

java - 如何区分同一个整数对象?

php - Perl 'bless' 到 PHP?

c++ - 具有自身无序集合的类

javascript - 列表 : {[id]:array1} and list: {. ..state.list、[id] :array1} in ReactJs? 之间有什么区别

java - 如何将字符串附加到 HashMap 元素?

java - "java.lang.IllegalArgumentException: No configs match configSpec "打开 Camera Intent 时

java - Android Studio httpURLConnection 应用程序崩溃

java - Libgdx动画翻转时闪烁

oop - 一个对象应该只做一件事的想法从何而来?

java - Map.entry和entrySet()泛型类型出错