java基础——多态

抽象类的多态

场景描述

一位刚毕业的老师,目前只能通过骑车上班,多年后终于坐骑升级了,有了自己的小汽车,于是骑着小汽车上班。

骑自行车上班

1.自行车类

public class Bike{//自行车类
	public void start(){
		System.out.println("自行车-启动:握好把手,踩下脚踏板...");
	}
	public void stop(){
		System.out.println("自行车-停止:捏刹车...");
	}
}

2.教师类

public class Teacher {
	public void open(Bike bike) {
		bike.start();
	}
	
	public void close(Bike bike){
		Bike bike.stop();
	}
}
  1. 测试类
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);
	}
}

开小车上班

如果此时我们还是这样先去写一个小汽车类,然后在教师类里重载open和close方法,那么这样是不是会觉得代码冗余呢,有些朋友会说并没有,那当我们面对更多人,以及更多的上班方式时,那你是不是要分别为他们准备一套,那样未必太麻烦了,而且还会破坏OCP原则;这时,我们就可以用多态的方式完成这样,只需要提取一个交通工具类,然后当需求增加的时候我们直接扩充这个交通工具类就可以了。
OCP原则 - 开闭原则:需求改动,尽可能少影响原有代码
* O - open :对创建类,是欢迎的
* C - close:对原有代码进行修改,是拒绝的
* p - principle:原则

  1. Vehicle类(交通工具)
public abstract class Vehicle {
	
	public abstract void start();

	public abstract void stop();
}
  1. Bike 类(自行车类)
public class Bike extends Vehicle{
	
	@Override
	public void start(){
		System.out.println("自行车-启动:握好把手,踩下脚踏板...");
	}
	
	@Override
	public void stop(){
		System.out.println("自行车-停止:捏刹车...");
	}

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

	@Override
	public void start(){
		System.out.println("小汽车-启动:系好安全带,一键启动,打转向灯,松手差,挂挡,踩油门");
	}
	
	@Override
	public void stop(){
		System.out.println("小汽车-停止:踩刹车,挂P档,拉手刹,关大灯,熄火,解开安全带");
	}
}
  1. Teacher类(需求者类)
public class Teacher {
	
	public void open(Vehicle v) {
		v.start();
	}
	
	public void close(Vehicle v){
		v.stop();
	}
}
  1. Test类(测试类)
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);
	}
}

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

提示

以上只是我自己的看法,如有相同纯属意外。如有错误,也请谅解,勿喷!如有收获或疑问,欢迎点赞评论!

  • 107
    点赞
  • 264
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值