分析执行结果。
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类,输出应为小数。
(1)类变量&类方法不可以使用this。
类变量访问: ①类名.类变量名 [推荐] 或者 ②对象名.类变量名
类方法调用: ①类名.类方法名 或者 ②对象名.类方法名
(2)静态成员也有访问修饰符,如果用了private修饰,那么在main方法中就不能通过“类名.静态变量”访问了。
编程题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.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方法内使用。
内部类
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.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类中
有一个Car类,有属性temperature(温度),车内有Air(空调)类,有吹风的功能flow,
Air会监视车内的温度,如果温度超过40度则吹冷气。如果温度低于0度则吹暖气,如果在这之间则关掉空调。
实例化具有不同温度的Car对象,调用空调的flow方法,测试空调吹的风是否正确。
我用的是局部内部类
老师用的是成员内部类
枚举类
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语句中匹配使用