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);
	}
}

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

提示

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

你可能感兴趣的:(java,抽象类,多态)