作业1
public class Boat implements Vehicles {
@Override
public void work() {
System.out.println(" 过河的时候,使用小船.. ");
}
}
public class Horse implements Vehicles {
@Override
public void work() {
System.out.println(" 一般情况下,使用马儿前进...");
}
}
public class Person {
private String name;
private Vehicles vehicles;
//在创建人对象时,事先给他分配一个交通工具
public Person(String name, Vehicles vehicles) {
this.name = name;
this.vehicles = vehicles;
}
//实例化Person对象“唐僧”,要求一般情况下用Horse作为交通工具,
//遇到大河时用Boat作为交通工具
//这里涉及到一个编程思路,就是可以把具体的要求,封装成方法-> 这里就是编程思想
//思考一个问题,如何不浪费,在构建对象时,传入的交通工具对象->动脑筋
public void passRiver() {
//先得到船
//判断一下,当前的 vehicles 属性是null, 就获取一艘船
// Boat boat = VehiclesFactory.getBoat();
// boat.work();
//如何防止始终使用的是传入的马 instanceOf
//if (vehicles == null) {
//vehicles instanceof Boat 是判断 当前的 vehicles是不是Boat
//(1) vehicles = null : vehicles instanceof Boat => false
//(2) vehicles = 马对象 :vehicles instanceof Boat => false
//(3) vehicles = 船对象 :vehicles instanceof Boat => true
if (!(vehicles instanceof Boat)) {
vehicles = VehiclesFactory.getBoat();
}
vehicles.work();
}
public void common() {
//得到马儿
//判断一下,当前的 vehicles 属性是null, 就获取一匹马
//if (vehicles == null) {
if (!(vehicles instanceof Horse)) {
//这里使用的是多态
vehicles = VehiclesFactory.getHorse();
}
//这里体现使用接口调用
vehicles.work();
}
//过火焰山
public void passFireHill() {
if (!(vehicles instanceof Plane)) {
//这里使用的是多态
vehicles = VehiclesFactory.getPlane();
}
//这里体现使用接口调用
vehicles.work();
}
}
//有Person类,有name和Vehicles属性,在构造器中为两个属性赋值
public class Plane implements Vehicles {
@Override
public void work() {
System.out.println("过火焰山,使用飞机...");
}
}
public interface Vehicles {
//有一个交通工具接口类Vehicles,有work接口
public void work();
}
public class VehiclesFactory {
//马儿始终是同一匹
private static Horse horse = new Horse(); //饿汉式
private VehiclesFactory(){}
//创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
//这里,我们将方法做成static
public static Horse getHorse() {
// return new Horse();
return horse;
}
public static Boat getBoat() {
return new Boat();
}
public static Plane getPlane() {
return new Plane();
}
}
作业2
public class Homework01 {
public static void main(String[] args) {
Car c =new Car();
Car c1=new Car(100);
System.out.println(c);//9.0,red
System.out.println(c1);//100.0,red
}
}
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;
}
}
作业3
public class Homework02 {
public static void main(String[] args) {
}
}
/*
1.在Frock类中声明私有的静态属性currentNum[int类型],初始值为100000,
作为衣服出厂的序列号起始值。
2.声明公有的静态方法getNextNum,作为生成上衣唯一序列号的方法。每调用一次,
将currentNum增加100,并作为返回值。
3.在TestFrock类的main方法中,分两次调用getNextNum方法,获取序列号并打印输出。
4.在Frock类中声明serialNumber(序列号)属性,并提供对应的get方法;
5.在Frock类的构造器中,通过调用getNextNum方法为Frock对象获取唯一序列号,
赋给serialNumber属性。
6.在TestFrock类的main方法中,分别创建三个Frock 对象,并打印三个对象的序列号,
验证是否为按100递增
*/
class Frock {
private static int currentNum = 100000;
private int serialNumber;
public Frock() {
serialNumber = getNextNum();
}
public static int getNextNum() {
currentNum += 100; //将currentNum增加100
return currentNum;
}
public int getSerialNumber() {
return serialNumber;
}
}
class TestFrock {
public static void main(String[] args) {
System.out.println(Frock.getNextNum());//100100
System.out.println(Frock.getNextNum());//100200
Frock frock = new Frock();//序列号就是 100300
Frock frock1 = new Frock();//序列号就是 100400
Frock frock2 = new Frock();//序列号就是 100500
System.out.println(frock.getSerialNumber());//100300
System.out.println(frock1.getSerialNumber());//100400
System.out.println(frock2.getSerialNumber());//100500
}
}
作业4
public class Homework03 {
public static void main(String[] args) {
Animal cat = new Cat();
Animal dog = new Dog();
cat.shout();
dog.shout();
}
}
/*
按要求实现下列问题: 1min完成 -> 抽象类的使用
动物类Animal包含了抽象方法 shout();
Cat类继承了Animal,并实现方法shout,打印“猫会喵喵叫”
Dog类继承了Animal,并实现方法shout,打印“狗会汪汪叫”
在测试类中实例化对象Animal cat =new Cat(),并调用cat的shout方法
在测试类中实例化对象Animal dog=new Dog(),并调用dog的shout方法
*/
abstract class Animal {//抽象类
public abstract void shout();
}
class Cat extends Animal {
@Override
public void shout() {
System.out.println("猫会喵喵叫");
}
}
class Dog extends Animal {
@Override
public void shout() {
System.out.println("狗会汪汪叫");
}
}
作业5
public class Homework04 {
public static void main(String[] args) {
Cellphone cellphone = new Cellphone();
//老韩解读
//1. 匿名内部类是
/*
new ICalculate() {
@Override
public double work(double n1, double n2) {
return n1 + n2;
}
}, 同时也是一个对象
他的编译类型 ICalculate, 他的运行类型就是 匿名内部类
*/
cellphone.testWork(new ICalculate() {
@Override
public double work(double n1, double n2) {
return n1 + n2;
}
}, 10, 8);//18.0
cellphone.testWork(new ICalculate() {
@Override
public double work(double n1, double n2) {
return n1 * n2;
}
}, 10, 8);
}
}
/*
1.计算器接口具有work方法,功能是运算,有一个手机类Cellphone,
定义方法testWork测试计算功能,调用计算接口的work方法,
2.要求调用CellPhone对象 的testWork方法,使用上 匿名内部类
*/
//编写接口
interface ICalculate {
//work方法 是完成计算,但是题没有具体要求,所以自己设计
//至于该方法完成怎样的计算,我们交给匿名内部类完成
public double work(double n1, double n2) ;
}
class Cellphone {
//老韩解读,当我们调用testWork方法时,直接传入一个实现了ICalculate接口的匿名内部类即可
//该匿名内部类,可以灵活的实现work,完成不同的计算任务
public void testWork(ICalculate iCalculate, double n1, double n2) {
double result = iCalculate.work(n1, n2);//动态绑定
System.out.println("计算后的结果是=" + result);
}
}
作业6
public class Homework05 {
public static void main(String[] args) {
new A().f1();
}
}
/*
编一个类A,在类中定义局部内部类B,B中有一个私有final常量name,有一个方法show()打印常量name。
进行测试
进阶:A中也定义一个私有的变量name,在show方法中打印测试
*/
class A {
private String NAME = "hello";
public void f1() {
class B { //局部内部类
private final String NAME = "韩顺平教育";
public void show() {
//如果内部类和外部类的属性重名,可以同 外部类.this.属性名来指定
System.out.println("NAME=" + NAME + " 外部类的name=" + A.this.NAME);
}
}
B b = new B();
b.show();
}
}
作业7
public class Homework06 {
public static void main(String[] args) {
Person tang = new Person("唐僧", new Horse());
tang.common();//一般情况下
tang.passRiver();//过河
tang.common();//一般情况下
tang.passRiver();//过河
tang.passRiver();//过河
tang.passRiver();//过河
//过火焰山
tang.passFireHill();
}
}
/*
1.有一个交通工具接口类Vehicles,有work接口
2.有Horse类和Boat类分别实现Vehicles
3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
4.有Person类,有name和Vehicles属性,在构造器中为两个属性赋值
5.实例化Person对象“唐僧”,要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具
6.增加一个情况,如果唐僧过火焰山, 使用 飞机 ==> 程序扩展性, 我们前面的程序结构就非常好扩展
编程 需求---->理解---->代码-->优化
*/
作业8
public class Homework07 {
public static void main(String[] args) {
//实例化不同的car对象
Car2 car2 = new Car2(60);
car2.getAir().flow();
Car2 car21 = new Car2(-1);
car21.getAir().flow();
Car2 car22 = new Car2(20);
car22.getAir().flow();
}
}
/*
有一个Car2类,有属性temperature(温度),车内有Air(空调)类,有吹风的功能flow,
Air会监视车内的温度,如果温度超过40度则吹冷气。如果温度低于0度则吹暖气,
如果在这之间则关掉空调。实例化具有不同温度的Car对象,调用空调的flow方法,
测试空调吹的风是否正确 . //体现 类与类的包含关系的案例 类(内部类【成员内部类】)
*/
class Car2 {
private double temperature;
public Car2(double temperature) {
this.temperature = temperature;
}
//Air 成员内部类
class Air {
public void flow() {
if(temperature > 40) {
System.out.println("温度大于40 空调吹冷气..");
} else if(temperature < 0) {
System.out.println("温度小于0 空调吹暖气..");
} else {
System.out.println("温度正常,关闭空调..");
}
}
}
//返回一个Air对象
public Air getAir() {
return new Air();
}
}
作业9
public class Homework08 {
public static void main(String[] args) {
//演示一下枚举值得switch使用
Color green = Color.GREEN;
green.show();
//比较一下
//switch () 中,放入枚举对象
//在每个case 后,直接写上在枚举类中,定义的枚举对象即可
switch (green) {
case YELLOW:
System.out.println("匹配到黄色");
break;
case BLACK:
System.out.println("匹配到黑色");
break;
default:
System.out.println("没有匹配到..");
}
}
}
/*
枚举类
创建一个Color枚举类
1.有 RED,BLUE,BLACK,YELLOW,GREEN这个五个枚举值/对象;
2.Color有三个属性redValue,greenValue,blueValue,
3.创建构造方法,参数包括这三个属性,
4.每个枚举值都要给这三个属性赋值,三个属性对应的值分别是
red:255,0,0 blue:0,0,255 black:0,0,0 yellow:255,255,0 green:0,255,0
5.定义接口,里面有方法show,要求Color实现该接口
6.show方法中显示三属性的值
7. 将枚举对象在switch语句中匹配使用
*/
interface IMyInterface {
public void show();
}
enum Color implements IMyInterface {
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() {
System.out.println("属性值为" + redValue + "," + greenValue + ","
+ blueValue);
}
}