#纠错#纠正其中的错误代码

public class Main {
    public static void main(String[] args){
        IMsg[]msgs=new IMsg[3];
        msgs[0]=new VoiceMsg();
        msgs[1]=new MoneyMsg(300);
        msgs[2]=new TextMsg("我给你说哈....");
        People p=new People();
        p.read(msgs);
    }
}
interface IMsg{
    public void beReadable();
}
class TextMsg implements IMsg {
    String text;

    public TextMsg(String text) {
        this.text = text;
    }

    @Override
    public String toString() {
        return "TextMsg:" + text;
    }

    class VoiceMsg implements IMsg {
        @Override
        public void beReadable() {
            sound();
        }

        public void sound() {
            System.out.println("播放语音信息");
        }
    }

    class MoneyMsg implements IMsg {
        double money;

        public MoneyMsg(double money) {
            this.money = money;
        }

        @Override
        public String toString() {
            return "MoneyMsg:" + money;
        }
    }

    class People {
        public void read(IMsg[] msgs) {
            //处理每一条消息
            for (int i = 0; i < msgs.length; i++) {
                msgs[i].beReadable();
            }
        }
    }
}

这段代码如何优化,纠正其中的错误

  • 类的定义不要放到 另一个类里面,它们应该都是同级,又不是内部类
  • 接口的抽象方法,实现类要实现
  • 参考如下:
public class Main {
    public static void main(String[] args){
        IMsg[]msgs=new IMsg[3];
        msgs[0]=new VoiceMsg();
        msgs[1]=new MoneyMsg(300);
        msgs[2]=new TextMsg("我给你说哈....");
        People p=new People();
        p.read(msgs);
    }
}
interface IMsg{
    void beReadable();
}
class TextMsg implements IMsg {
    String text;

    public TextMsg(String text) {
        this.text = text;
    }

    @Override
    public String toString() {
        return "TextMsg:" + text;
    }

    @Override
    public void beReadable() {
        System.out.println(toString());
    }
}

class VoiceMsg implements IMsg {
    @Override
    public void beReadable() {
        sound();
    }

    public void sound() {
        System.out.println("播放语音信息");
    }
}

class MoneyMsg implements IMsg {
    double money;

    public MoneyMsg(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "MoneyMsg:" + money;
    }

    @Override
    public void beReadable() {
        System.out.println(toString());
    }
}

class People {
    public void read(IMsg[] msgs) {
        //处理每一条消息
        for (int i = 0; i < msgs.length; i++) {
            msgs[i].beReadable();
        }
    }
}

public class Main {
    public static void main(String[] args){
        // 创建一个长度为3的IMsg接口类型的数组
        IMsg[] msgs = new IMsg[3];
        // 创建一个VoiceMsg类型的对象,并赋值给msgs数组的第一个元素
        msgs[0] = new VoiceMsg();
        // 创建一个MoneyMsg类型的对象,并赋值给msgs数组的第二个元素,其中money属性值为300
        msgs[1] = new MoneyMsg(300);
        // 创建一个TextMsg类型的对象,并赋值给msgs数组的第三个元素,其中text属性值为"我给你说哈...."
        msgs[2] = new TextMsg("我给你说哈....");
        // 创建一个People类型的对象
        People p = new People();
        // 调用People对象的read方法,并将msgs数组作为参数传入
        p.read(msgs);
    }
}

// IMsg接口,包含beReadable方法
interface IMsg{
    public void beReadable();
}

// TextMsg类实现了IMsg接口
class TextMsg implements IMsg {
    String text;
    public TextMsg(String text) {
        this.text = text;
    }
    @Override
    public String toString() {
        return "TextMsg:" + text;
    }
}

// VoiceMsg类实现了IMsg接口
class VoiceMsg implements IMsg {
    // 重写了beReadable方法,用于播放语音信息
    @Override
    public void beReadable() {
        sound();
    }
    public void sound() {
        System.out.println("播放语音信息");
    }
}

// MoneyMsg类实现了IMsg接口
class MoneyMsg implements IMsg {
    double money;
    public MoneyMsg(double money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "MoneyMsg:" + money;
    }
}

// People类
class People {
    // read方法,接收一个IMsg类型的数组作为参数,并依次处理每一条消息
    public void read(IMsg[] msgs) {
        for (int i = 0; i < msgs.length; i++) {
            msgs[i].beReadable();
        }
    }
}