目录
第一题
第二题
第三题
第四题
思路分析: 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中的name
System.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{
@Override
public 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类分别实现Vehicles
3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
4.有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{
@Override
public 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,0
7.定义接口,里面有方法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;
}
@Override
public void show() {
}
@Override
public String toString() {
return "Color{" +
"redValue=" + redValue +
", greenValue=" + greenValue +
", blueValue=" + blueValue +
'}';
}
}
interface IA {
public void show();
}