chapter10-homework-Java

第十章作业

    • Homework01
      • 知识点
    • Homework02
      • 知识点
    • Homework03
      • 知识点
    • Homework04
      • 知识点
    • Homework05
      • 知识点
    • Homework06
    • Homework07
    • Homework08

Homework01

分析执行结果。

public static void main(String[] args) {
	Car_ c = new Car_();
	Car_ c1 = new Car_(100);
	System.out.println(c);
	System.out.println(c1);
}
class Car_ {
    double price = 10;
    static String color = "white";

    public String toString() {
        return price + "\t" + color;
    }
    public Car_() {
        this.price = 9;
        this.color = "red";
    }
    public Car_(double price) {
        this.price = price;
    }
}

我的答案:
9 white
100 white

正确答案为:
9.0 red
100.0 red

知识点

toString的改写
静态变量(类变量)
变量类型

打印对象代表输出对象的toString方法。
静态变量(类变量)的值是可以修改的。
同一个类的所有对象共享类变量&类方法。
属性price是double类,输出应为小数。

Homework02

chapter10-homework-Java_第1张图片

知识点

(1)类变量&类方法不可以使用this。
类变量访问: ①类名.类变量名 [推荐] 或者 ②对象名.类变量名
类方法调用: ①类名.类方法名 或者 ②对象名.类方法名
(2)静态成员也有访问修饰符,如果用了private修饰,那么在main方法中就不能通过“类名.静态变量”访问了。

Homework03

编程题Homework03.java
按要求实现下列问题:
1.动物类Animal包含了抽象方法shout();
2.Cat类继承了Animal,并实现方法shout,打印“猫会瞄瞄叫”
3.Dog类继承了Animal,并实现方法shout,打印“狗会汪注叫”
4.在测试类中实例化对象Animal cat =new Cat(),并调用cat的shout方法
5.在测试类中实例化对象Animal dog=new Dog()。并调用dog的shout方法

知识点

(1)抽象类相关
A.抽象类不一定要包含abstract方法,如果只有普通方法也是可以的。
B.一旦类包含了abstract方法,则这个类必须声明为abstract。
C.抽象方法不能使用 private、final 和 static 来修饰。【注意】默认、protected、public是可以的!但是子类要与父类一致
(2)多态
A.向上转型:父类的引用指向了子类的对象 Animal cat = new Cat();
B.向下转型:Cat kitty = (Cat) cat ;

Homework04

编程题Homework04.java 2min
1.计算器接口具有work方法,功能是运算,有一个手机类Cellphone,定义方法testWork测试计算功能,调用计算接口的work方法
2.要求调用CellPhone对象的 testWork方法,使用上匿名内部类

!!!不会写。。。/(ㄒoㄒ)/
答案:

public class Homework04 {
    public static void main(String[] args) {
        Cellphone cellphone = new Cellphone();
        cellphone.testWork(new ICalculate() {
            @Override
            public double work(double n1, double n2) {
                return n1 + n2;
            }
        }, 10, 8);//18.0
    }
}

interface ICalculate {
    public double work(double n1, double n2) ;
}

class Cellphone {
    public void testWork(ICalculate iCalculate, double n1, double n2) {
        double result = iCalculate.work(n1, n2);//动态绑定
        System.out.println("计算后的结果是=" + result);
    }
}

分析总结:

/*
分析题目:

“接口 work方法”
这里的work是程序员自定义的。
interface ICalculate {
    public double work(double n1, double n2) ;
}
------------------------------------------------------------------
“手机类Cellphone,定义方法testWork测试计算功能,调用计算接口的work方法”
class Cellphone {
    //Q:testWork为什么设置成这样?
    public void testWork(ICalculate iCalculate, double n1, double n2) {
        double result = iCalculate.work(n1, n2);//动态绑定
        System.out.println("计算后的结果是=" + result);
    }
}
------------------------------------------------------------------
“调用CellPhone对象的 testWork方法,使用上匿名内部类”
Cellphone cellphone = new Cellphone();
cellphone.testWork(new ICalculate() {
    @Override
    public double work(double n1, double n2) {
        return n1 + n2;
    }
}, 10, 8);
------------------------------------------------------------------
匿名内部类:
【位置】外部类的方法/代码块里
【语法】new 类或者接口(参数列表) {
            类体
        }
【本质】匿名内部类是对象。
【底层】
分析上述代码:因为这里是基于接口的匿名内部类,所以底层是implements
① 类XXX(XXX表示匿名)先实现接口ICalculate
class XXX implements ICalculate {
    @Override
    public void cry() work(double n1, double n2) {
        return n1 + n2;
    }
}
这里的XXX其实是,Homework04$1 (class Homework04$1 implements ICalculate)
② new XXX();
创建了Homework04$1类的一个对象
------------------------------------------------------------------
testWork方法中的参数是ICalculate iCalculate
public void testWork(ICalculate iCalculate, double n1, double n2)
接口ICalculate的引用iCalculate 接收(指向) main方法 传来的对象《new XXX()》
接口引用可以指向实现了接口的类的对象
------------------------------------------------------------------
iCalculate -> new XXX() -> XXX implements ICalculate
double result = iCalculate.work(n1, n2);
先去XXX类中寻找work方法,发现已经被重写,就调用。

*/

知识点

(1)接口中所有的方法是public方法
(2)interface 中的方法有三种
① 抽象方法,可以不写abstract
② 默认实现方法,需要使用default关键字修饰
③ 静态方法
(3)匿名内部类:在外部类的方法/代码块内。在Homework04类的main方法内使用。

Homework05

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

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

知识点

1.常量怎么定义:final,大写
final private String name=“haha”;这样就是常量
2.内部类访问外部类
① 内部类可以直接访问外部类的成员,System.out.println(name);
② 如果外部类和内部类的属性重名 System.out.println(A.this.name);

Homework06

编程题Homework06.java
1、有一个交通工具接口类Vehicles,有work接口
2、有Horse类和Boat类分别实现Vehicles
3、创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
4、有Person类,有name和Vehicles属性,在构造器中为两个属性赋值
5、实例化Person对象“唐僧”,要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具

分析
【交通工具工厂类】是创建工具的
创建 -> 返回两个工具的对象
获得交通工具Horse和Boat -> 不创建类 -> static

【一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具】
把这两个封装成方法,到Person类中

Homework07

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

我用的是局部内部类
老师用的是成员内部类

Homework08

枚举类
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语句中匹配使用

你可能感兴趣的:(Java,SE,java)