一.多态
1.类的多态
需求:
需求:老师骑着自行车上班
分析:老师类、自行车类
需求升级/迭代:自行车->小汽车
步骤:
1.创建Car类,编写start、stop
2.在原有Teacher类的基础上编写open、close
注意:违反了OCP原则
OCP - 开闭原则:
O - open :在需求升级时,对于创建类是欢迎的
C - close:在需求升级时,改变原有代码是拒绝的
注意:需求升级时,尽量不要改变以前的类,否则容易出bug
需求升级/迭代:自行车->小汽车->飞机
步骤:创建Plane类继承Vehicle
代码解析:
package com.dream.test01;
public class Test01 {
public static void main(String[] args) {
Teacher t = new Teacher();
//类的多态:子类对象指向父类引用
//父类引用中存储的是子类对象在堆中的地址
Teacher t = new Teacher();
Vehicle v1 = new Bick();
Vehicle v2 = new Car();
Vehicle v3 = new Plane();
t.open(v1);
System.out.println("欣赏沿途的风景...");
t.close(v1);
System.out.println("---------------");
t.open(v2);
System.out.println("认真开车...");
t.close(v2);
System.out.println("---------------");
t.open(v3);
System.out.println("欣赏沿途的风景...");
t.close(v3);
}
}
package com.dream.test01;
public abstract class Vehicle {
public abstract void start();
public abstract void stop();
}
package com.dream.test01;
public class Teacher {
public void open(Vehicle v){
v.start();
}
public void close(Vehicle v){
v.stop();
}
}
package com.dream.test01;
public class Bick extends Vehicle{
@Override
public void start(){
System.out.println("自行车:握好扶手,踩下脚踏板");
}
@Override
public void stop(){
System.out.println("自行车:捏手刹~~~");
}
}
package com.dream.test01;
public class Car extends Vehicle{
@Override
public void start(){
System.out.println("小汽车:一键启动,踩下油门");
}
@Override
public void stop(){
System.out.println("小汽车:踩刹车,熄火~~");
}
}
package com.dream.test01;