> 文章列表 > 第11章练习题(2)

第11章练习题(2)

第11章练习题(2)

目录

第一题

第二题

第三题

第四题


第一题

思路分析:
1.首先成员内部类是定义在方法或者代码块中
2.因为默认遵守的是就近原则,如果直接输出name,那么会访问的都是B类中的属性,我们访问外部类中的属性,就需要使用类名.this.属性名去访问

要求:

        内部类
        1.编一个类A,在类中定义局部内部类B,B中有一个私有常量name,有一个方法show)打
        印常量name。进行测试
        2.A中也定义一个私有的变量name,在show方法中打印测试

package idea.chapter11.homework;public class Homework05 {public static void main(String[] args) {/*内部类1.编一个类A,在类中定义局部内部类B,B中有一个私有常量name,有一个方法show)打印常量name。进行测试2.A中也定义一个私有的变量name,在show方法中打印测试*/A a = new A();a.hi();}
}
/*
思路分析:
1.首先成员内部类是定义在方法或者代码块中
2.因为默认遵守的是就近原则,如果直接输出name,那么会访问的都是B类中的属性,我们访问外部类中的属性,就需要使用类名.this.属性名去访问*/class A {//外部类的私有属性private String name = "tom";public void hi() {//局部内部类,定义在方法或者代码块中class B {private String name = "jack";public void show() {//因为默认遵守就近原则,所以这里访问到的就是内部类B中的nameSystem.out.println(name);//此时在外部类中也有一个name属性,那么我们要去访问外部类中的并且名字和内部类中相同的属性是,我们需要这样访问System.out.println(A.this.name);//这里访问到的就是外部类中的属性}}B b = new B();b.show();}}

第二题

思路分析:

1.vehicles是一个接口类型可以指向实现了Vehicles接口类的对象实例 因为Boat类和House类都实现了Vehicles接口,因此接口可以指向实现了该类的对象

2.懒汉式实现步骤

//步驟
//1.任然构造器私有化
//2.定义一个static静态属性对象
//3.提供一个public的static方法,可以返回一个Cat对象
//4.懒汉式,只有当用户使用getInstance时,才返回cat对象, 后面再次调用时,会返回上次创建的cat对象,从而保证单例

3.本题中还用到了单例设计模式中的懒汉式

Boat类

package idea.chapter11.homework.homework06;public class Boat implements Vehicles{@Overridepublic void work() {System.out.println("遇到河流使用船");}
}

Homework06类

package idea.chapter11.homework.homework06;public class Homework06 {public static void main(String[] args) {/*1.有一个交通工具接口类Vehicles,有work方法2.有Horse类和Boat类分别实现Vehicles3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat4.有Person类,有name和Vehicles属性,在构造器中为两个属性赋值5.实例化Person对象“唐僧”,要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具*/Person tang = new Person("唐僧", new Horse());tang.common();tang.passRiver();tang.passRiver();tang.passRiver();tang.common();}
}

Horse类

package idea.chapter11.homework.homework06;public class Horse implements Vehicles{@Overridepublic void work() {System.out.println("一般情况下用马");}
}

Person类

package idea.chapter11.homework.homework06;public 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是一个接口类型可以指向实现了Vehicles接口类的对象实例 因为Boat类和House类都实现了Vehicles接口,因此接口可以指向实现了该类的对象vehicles = VehiclesFactory.getBoat();}vehicles.work();}public void common() {if (!(vehicles instanceof Horse)) {vehicles = VehiclesFactory.getHorse();}vehicles.work();}
}

VehiclesFactory类

package idea.chapter11.homework.homework06;public class VehiclesFactory {//运用到单例设计模式——懒汉式,每次返回的会是同一个对象private static Horse horse=new Horse();//将构造器私有化,防止一个新的对象private VehiclesFactory() {}public static Horse getHorse(){return new Horse();}public static Boat getBoat(){return new Boat();}
}

Vehicles接口

package idea.chapter11.homework.homework06;public interface Vehicles {public void work();
}

第三题

思路分析:
1.使用了局部内部类,把内部类定义在方法中,
2.在外部类中有一个属性是温度,并且是私有的属性,但是因为内部类最大的特点就是可以直接访问外部类中的私有属性,所以在内部类中写一个方法判断即可
3.因为外部其他类不可以直接访问内部类中的方法,因此我们要现在f1方法中创建好Air的对象,最后外部其他类创建外部类的对象,再去调用方法即可

第二种方法思路分析

1.第二种方法使用了成员内部类了的方法,我们知道内部类最大的特点就是可以直接访问外部类中的私有属性,所以我们只需要在内部中编写一个方法,判断即可
2.我们可以在外部类中定义一个方法,用于返回一个内部类中对象,这样在外部其他类去调用该方法的时候,就可以等到内部类的对象,在调用对应的方法即可

要求:

        内部类
        有一个Car1类,有属性temperature(温度),车内有Air(空调)类,有吹风的功能flowAir会监视车内的温度
        ,如果温度超过40度则吹冷气。如果温度低于0度则吹暖气,如果在这之间则关掉空调。
        实例化具有不同温度的Car对象,调用空调的flow方法,测试空调吹的风是否正确.

package idea.chapter11.homework;public class Homework07 {public static void main(String[] args) {Car1 car1 = new Car1(41);car1.f1();Car1 car2 = new Car1(4);car2.f1();Car1 car3 = new Car1(-1);car3.f1();}
}/*
思路分析:
1.使用了局部内部类,把内部类定义在方法中,
2.在外部类中有一个属性是温度,并且是私有的属性,但是因为内部类最大的特点就是可以直接访问外部类中的私有属性,所以在内部类中写一个方法判断即可
3.因为外部其他类不可以直接访问内部类中的方法,因此我们要现在f1方法中创建好Air的对象,最后外部其他类创建外部类的对象,再去调用方法即可*/
class Car1 {private double temperature;public Car1(double temperature) {this.temperature = temperature;}public void f1() {class Air {public void flowAir() {if (temperature > 40) {System.out.println("空调吹冷风");} else if (temperature < 0) {System.out.println("空调吹暖风");} else {System.out.println("关闭空调");}}}Air air = new Air();air.flowAir();}
}//第二种方法  类里面包含一个类,通过写一个公共的方法返回Air对象
/*
思路分析:
1.第二种方法使用了成员内部类了的方法,我们知道内部类最大的特点就是可以直接访问外部类中的私有属性,所以我们只需要在内部中编写一个方法,判断即可
2.我们可以在外部类中定义一个方法,用于返回一个内部类中对象,这样在外部其他类去调用该方法的时候,就可以等到内部类的对象,在调用对应的方法即可*/
//public class Homework07 {
//    public static void main(String[] args) {
//        Car_ car_ = new Car_(2);
//        car_.getAir().flowAir();
//    }
//}
//
//class Car_ {
//    private double temperature;
//
//    public Car_(double temperature) {
//        this.temperature = temperature;
//    }
//
//
//    class Air {
//        public void flowAir() {
//            if (temperature > 40) {
//                System.out.println("空调吹冷风");
//            } else if (temperature < 0) {
//                System.out.println("空调吹暖风");
//            } else {
//                System.out.println("关闭空调");
//            }
//        }
//    }
//
//    //提供一个公共的方法返回一个Air对象
//    public Air getAir() {
//        return new Air();
//    }
//}

第四题

思路分析:
1.因为Color是enum修饰的,所以他隐式的继承了Enum类,因为Java是单继承机制,所以不能在继承其他类,但是可以实现接口
2.使用enum关键字去定义属性,常量值要写在第一行,否则会报错
3.RED(255, 0, 0) 后面括号中的三个参数,对应的就是构造器中的值

要求:

        枚举类
        1.创建一个Color枚举类
        2.有RED,BLUE,BLACK,YELLOW GREEN这个五个枚举值/对象;
        3.Color有三个属性redValue,greenValue,blueValue,
        4.创建构造方法,参数包括这三个属性,
        5. 每个枚举值都要给这三个属性赋值,三个属性对应的值分别是
        6.red:255.0.0 blue:0.0.255  black:0.0.0   yellow:255,255.0 green:0,255,0
        7.定义接口,里面有方法show,要求Color实现该接口
        8.show方法中显示三属性的值
        9.将枚举对象在switch语句中匹配使用

小细节:enum修饰的类,会隐式的继承Enum类

package idea.chapter11.homework;public class Homework08 {public static void main(String[] args) {/*枚举类1.创建一个Color枚举类2.有RED,BLUE,BLACK,YELLOW GREEN这个五个枚举值/对象;3.Color有三个属性redValue,greenValue,blueValue,4.创建构造方法,参数包括这三个属性,5. 每个枚举值都要给这三个属性赋值,三个属性对应的值分别是6.red:255.0.0 blue:0.0.255  black:0.0.0   yellow:255,255.0 green:0,255,07.定义接口,里面有方法show,要求Color实现该接口8.show方法中显示三属性的值9.将枚举对象在switch语句中匹配使用*/Color a = Color.BLACK;Color b = Color.RED;Color c = Color.YELLOW;Color d = Color.GREEN;switch (c) {case RED:System.out.println("匹配到红色");System.out.println(Color.RED);break;case BLUE:System.out.println("匹配到蓝色");System.out.println(Color.BLUE);break;case BLACK:System.out.println("匹配到黑色");System.out.println(Color.BLACK);break;case YELLOW:System.out.println("匹配到黄色");System.out.println(Color.YELLOW);break;case GREEN:System.out.println("匹配到绿色");System.out.println(Color.GREEN);break;}}
}/*
思路分析:
1.因为Color是enum修饰的,所以他隐式的继承了Enum类,因为Java是单继承机制,所以不能在继承其他类,但是可以实现接口
2.使用enum关键字去定义属性,常量值要写在第一行,否则会报错
3.RED(255, 0, 0) 后面括号中的三个参数,对应的就是构造器中的值*/
enum Color implements IA {RED(255, 0, 0), BLUE(0, 0, 255),BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0);private int redValue;private int greenValue;private int blueValue;Color(int redValue, int greenValue, int blueValue) {this.redValue = redValue;this.greenValue = greenValue;this.blueValue = blueValue;}@Overridepublic void show() {}@Overridepublic String toString() {return "Color{" +"redValue=" + redValue +", greenValue=" + greenValue +", blueValue=" + blueValue +'}';}
}interface IA {public void show();
}