子类的子类如何从第一个子类的超类继承方法?

时间:2018-12-09 00:52:34

标签: java class oop inheritance

UML Diagram

我已经发布了一个UML图,用于分配解码给定电阻器的色带并返回一个字符串,该字符串返回以欧姆为单位的电阻及其容差。

我在继承层次结构上有些挣扎,在教授的问题描述中,LookupTable类是带有抽象get()方法的抽象类。 NumberLookup和ToleranceLookup类扩展了LookupTable类,而MultiplierLookup类扩展了NumberLookup类。

我想我最难以概念化的是MultiplierLookup类是否应该扩展LookupTable类或NumberLookup类。

这是具体的问题描述:

ResistorDecoder对象将是Program.java用来将颜色数组转换为对人类友好的字符串的对象。 ResistorDecoder将需要几种不同类型的查找表,具体取决于我们是从颜色还是从数值中查找String。 LookupTable对象是一个抽象类,因为它包含抽象方法get()。 ToleranceLookup对象采用一种颜色并返回一个字符串,该字符串是公差字符串(例如±5%)。 NumberLookup对象采用一种颜色,可以返回String,但也可以返回Double。由于我们正在扩展LookupTable对象(它之前没有返回双精度值的能力),因此我们需要从LookupTable对象继承。 MultiplierLookup对象的工作方式与NumberLookup对象的工作方式类似,但内部查找表不同。因此,即使我们不需要添加任何方法,也需要从NumberLookup表继承。提示:可以使MultiplierLookup使用NumberLookup的getDouble行为来简化其职责吗?

到目前为止,我已经尝试如下创建各种类/子类:

LookupTable.java

/**
 * abstract class with abstract method get()
 * 
 * 
 */

public abstract class LookupTable {

    /**
     * 
     * abstract class with abstract get method that has no implementation defined, behavior is defined in subclasses
     * 
     * @param color
     * @return 
     */
    abstract String get(String color);

}

NumberLookup.java

        public class NumberLookup extends LookupTable {
    private HashMap<String, String> numberTable = new HashMap<>();

    String get(String color) { // abstract method implementation
        return color;
    }

    public NumberLookup() {
        String[] colors = { "Silver", "Gold", "Black", "Brown", "Red", "Orange", "Yellow", "Green", "Blue", "Violet",
                "Gray", "White" };
        for (String color : colors) {
            for (int i = 0; i <= 9; i++) {
                numberTable.put(color, (i));
            }
        }

        // constructor

    }
/**
 * 
 * @param color
 * @return the corresponding 
 */

        public double getDouble(String color) { // new method

            return (numberTable.get(color));
    }

}

ToleranceLookup.java

/**
 * intakes a color and returns a String that is the tolerance String ex.( (+/-
 * 5%))
 * 
 * adds the OHM symbol and tolerance to the end of the final string to be
 * printer
 */

public class ToleranceLookup extends LookupTable {

    /**
     * 
     * default empty constructor
     */
    public ToleranceLookup() {

    }

    /**
     * 
     * @param color band as a string
     * @return the Ohm and tolerance suffix
     */
    public String get(String color) {
        switch (color) {
        case "Black":
            return "\u03A9";
        case "Brown":
            return ("\u03A9, \u00B1" + "1%");
        case "Red":
            return ("\u03A9, \u00B1" + "2%");
        case "Orange":
            return ("\u03A9");
        case "Yellow":
            return ("\u03A9, \u00B1" + "5%");
        case "Green":
            return ("\u03A9, \u00B1" + ".5%");
        case "Blue":
            return ("\u03A9, \u00B1" + ".25%");
        case "Violet":
            return ("\u03A9, \u00B1" + ".1%");
        case "Gray":
            return ("\u03A9, \u00B1" + "10%");
        case "White":
            return ("\u03A9");
        case "Gold":
            return ("\u03A9, \u00B1" + "5%");
        case "Silver":
            return ("\u03A9, \u00B1" + "10%");
        case "None":
            return ("\u03A9, \u00B1" + "20%");
        default:
            return null;

        }

    }

}

MultiplierLookup.java

/**
 * inherits from the NumberLookup object but no methods need to be added.
 * 
 * Internal lookup table is different
 * 
 * 
 */

public class MultiplierLookup extends NumberLookup {
    private HashMap<String, Double> multiplier = new HashMap<>();

    String get(String color) {
        return color;
    }

    public MultiplierLookup() {// constructor
        String[] colors = new String[] { "Silver", "Gold", "Black", "Brown", "Red", "Orange", "Yellow", "Green", "Blue",
                "Violet", "Gray", "White" };
        for (String color : colors) {
            int j = -2;
            while (j <= 9) {
                multiplier.put(color, (Double.toString(Math.pow(10, j)));
                j++;
            }
        }
    }

    public Double getDouble(String color) { // returns a double value
        return multiplier.get(color);

    }

}

我知道到目前为止代码中存在一些错误,并且我想我大部分时候都知道如何解决这些错误,但是我真的是OOP和相关/相关类的新手。尽管我了解继承的基本原理,但是我不确定如何使MultiplierLookup类从NumberLookup和LookupTable继承。抱歉,这个问题太冗长或太基本了,但是我花了很多时间浏览本网站上的所有作业,并且在这里的输入字面值是非常宝贵的,所以我认为这是转向的最佳选择。

我绝不希望任何人为我完成此代码,而我真的很喜欢解决问题,但是我认为,以具体示例向我解释这些概念将是有益的。预先谢谢你!

此外,由于它依赖于子类,因此我还没有构造ResistorDecoder类。但这主要是根据其他类的信息来组成一个字符串。

0 个答案:

没有答案