Java 第10、11章 面向对象高级 本章作业

目录

  • 6 综合编程题
  • 7 成员内部类应用
  • 8 枚举类 & switch

6 综合编程题

Java 第10、11章 面向对象高级 本章作业_第1张图片
3. 交通工具工厂类:由于在任务中只需要调用其中获得交通工具的方法,可以将方法定义为静态方法,这样就不用先创建工厂类的对象,直接“类名.方法” 即可。为了不让其创建对象,可以将其构造器私有化。

5.一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具:编程思路——可以把具体的要求,封装成方法
由于在创建“唐僧”的时候要给他一个交通工具,所以在后来赋值目标交通工具的时候,需要先判断当前对象有没有目标交通工具,可以使用instanceof对当前交通工具进行判断,如果不是目标交通工具,再进行申请。

另外根据常识,马通常始终都是特定的一匹,但船每一次都不同,所以马可以在工厂类中使用**“饿汉式”创建静态对象**,并且需要马的时候每次返回该特定对象;而船每次需要重新创建对象。

*.拓展:过火焰山坐飞机。出于方便加上只过一次火焰山的考虑,我选择直接使用匿名类。

package com.hspedu.chapter10homework06;

public class Homework06 {
    public static void main(String[] args) {
        Person person = new Person("唐僧", Factory.getHorse());
        person.common();
        person.passRiver();
        person.common();
        person.passFire();
    }
}

interface Vehicles {
    public void work();
}

class Horse implements Vehicles {
    @Override
    public void work() {
        System.out.println("horse");
    }
}

class Boat implements Vehicles {
    @Override
    public void work() {
        System.out.println("boat");
    }
}

class Factory {
    private static Horse HORSE = new Horse();
    public static Horse getHorse() {
        return HORSE;
    }
    public static Boat getBoat() {
        return new Boat();
    }
}

class Person {
    private String name;
    private Vehicles vehicles;

    public Person(String name, Vehicles vehicles) {
        this.name = name;
        this.vehicles = vehicles;
    }
    public void passRiver() {
        if (!(vehicles instanceof Boat))
            vehicles = Factory.getBoat();
        vehicles.work();
    }
    public void common() {
        if (!(vehicles instanceof Horse))
            vehicles = Factory.getHorse();
        vehicles.work();
    }
    public void passFire() {
        vehicles = new Vehicles() {
            @Override
            public void work() {
                System.out.println("flight");
            }
        };
    }
}

7 成员内部类应用

Java 第10、11章 面向对象高级 本章作业_第2张图片
如果想要基于创建的类Car的对象car,调用Car的成员内部类Air,可以创建一个方法返回在car基础上的Air对象。
一开始自己傻了吧唧想在Car里创建一个静态Air对象,但回头想想,岂不是意味着Car类加载之后直接就确定了Air对象,并且所有Car对象的Air对象都会是同一个……

package com.hspedu.chapter10homework07;

public class Homework07 {
    public static void main(String[] args) {
        Car car1 = new Car(-0.1);
        Car car2 = new Car(40.1);
        Car car3 = new Car(12);
        car1.getAir().flow();
        car2.getAir().flow();
        car3.getAir().flow();
    }
}

class Car {
    private double temperature;
    private Air air = new Air();
    public Car(double temperature) {
        this.temperature = temperature;
    }

    public class Air {
        public void flow() {
            if (temperature > 40)
                System.out.println("flow cold air...");
            else if (temperature < 0)
                System.out.println("flow warm air...");
            else
                System.out.println("shut down...");
        }
    }
    public Air getAir() {
        return air;
    }
}

8 枚举类 & switch

Java 第10、11章 面向对象高级 本章作业_第3张图片
switch的枚举类型之一是枚举类。不废话上代码:

package com.hspedu.chapter10homework08;

public class Homework08 {
    public static void main(String[] args) {
        Color[] colors = Color.values();
        for (Color color: colors) {
            System.out.println(color.ordinal()); // 可以输出序号
            switch (color) {
                case RED:
                    System.out.print("RED: ");
                    color.show();
                    break;
                case BLUE:
                    System.out.print("BLUE: ");
                    color.show();
                    break;
                case BLACK:
                    System.out.print("BLACK: ");
                    color.show();
                    break;
                case YELLOW:
                    System.out.print("YELLOW: ");
                    color.show();
                    break;
                case GREEN:
                    System.out.print("GREEN: ");
                    color.show();
                    break;
                default:
                    System.out.println("No such color");
                    break;
            }
        }
    }
}

interface IF {
    public void show();
}
enum Color implements IF {
    RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0),
    YELLOW(255, 255, 0), GREEN(0, 255, 0);
    private double redValue, greenValue, blueValue;

    Color(double redValue, double greenValue, double blueValue) {
        this.redValue = redValue;
        this.greenValue = greenValue;
        this.blueValue = blueValue;
    }

    @Override
    public void show() {
        System.out.println(redValue + " " + greenValue + " " + blueValue);
    }
}

你可能感兴趣的:(Java基础,java,开发语言)