多态——Java基础

抽象类的多态场景描述一位刚毕业的老师,目前只能通过骑车上班,多年后终于坐骑升级了,有了自己的小汽车,于是骑着小汽车上班。骑自行车上班1.自行车类public class Bike{//自行车类
public void start(){
System.out.println(“自行车-启动:握好把手,踩下脚踏板…”);
}
public void stop(){
System.out.println(“自行车-停止:捏刹车…”);
}
}
123456782.教师类public class Teacher {
public void open(Bike bike) {
bike.start();
}

public void close(Bike bike){
	Bike bike.stop();
}

}
123456789测试类public class Test01 {
public static void main(String[] args) {
Teacher t = new Teacher();
Bike bike = new bike();
t.open(bike);
System.out.println(“欣赏沿途的风景…”);
t.close(bike);
}
}
123456789开小车上班如果此时我们还是这样先去写一个小汽车类,然后在教师类里重载open和close方法,那么这样是不是会觉得代码冗余呢,有些朋友会说并没有,那当我们面对更多人,以及更多的上班方式时,那你是不是要分别为他们准备一套,那样未必太麻烦了,而且还会破坏OCP原则;这时,我们就可以用多态的方式完成这样,只需要提取一个交通工具类,然后当需求增加的时候我们直接扩充这个交通工具类就可以了。
OCP原则 - 开闭原则:需求改动,竟可能少影响原有代码

  • O - open :对创建类,是欢迎的

  • C - close:对原有代码进行修改,是拒绝的

  • p - principle:原则Vehicle类(交通工具)public abstract class Vehicle {

    public abstract void start();

    public abstract void stop();
    }
    123456Bike 类(自行车类)public class Bike extends Vehicle{

    @Override
    public void start(){
    System.out.println(“自行车-启动:握好把手,踩下脚踏板…”);
    }

    @Override
    public void stop(){
    System.out.println(“自行车-停止:捏刹车…”);
    }

}
12345678910111213Car类(小汽车类)public class Car extends Vehicle{

@Override
public void start(){
	System.out.println("小汽车-启动:系好安全带,一键启动,打转向灯,松手差,挂挡,踩油门");
}

@Override
public void stop(){
	System.out.println("小汽车-停止:踩刹车,挂P档,拉手刹,关大灯,熄火,解开安全带");
}

}
123456789101112Teacher类(需求者类)public class Teacher {

public void open(Vehicle v) {
	v.start();
}

public void close(Vehicle v){
	v.stop();
}

}
12345678910Test类(测试类)public class Test01 {

public static void main(String[] args) {
	Teacher t1 = new Teacher();
	//类的多态:子类对象指向父类引用
	//类的多态:父类引用存储了子类对象的内存地址
	Vehicle v = new Bike();
	
	t1.open(v);
	System.out.println("欣赏沿途的风景...");
	t1.close(v);
	System.out.println("...................");
	Teacher t2 = new Teacher();
	Vehicle vehicle = new Car();
	t2.open(vehicle);
	System.out.println("欣赏沿途的风景...");
	t2.close(vehicle);
}

}
12345678910111213141516171819
在我们升级后,如果需求增加时,比如有一个电动车的需求,那么我们的步骤就应该是,创建一个电动车的类去继承交通工具类,然后重写交通工具类的抽象方法。创建电动车对象指向父类引用,再交给给需求者使用便可。在这里同样是调用t.open(v);和t.close(v);这是结果就不一样的。这就是多态的结果,不同人都要上班,就一个上班的动作,而产生上班方式的结果不一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值