2021-01-19

文章目录

  • 前言
  • 一、多态概述
  • 二、多态实现的条件
  • 三、多态的作用
  • 三、多态的转型(重要!!!)
    • 1.向上转型
    • 小结
    • 2.向下转型
    • 小结
  • 四、多态的应用场景
    • 1、函数输入参数的多态
    • 小结
    • 2、函数返回值得多态
    • 小结
  • 总结


前言

今天又接触到了新的知识,感觉一下子就又又刷新了以前的认知,东西于是又变得有意思了起来,学习又有了新的挑战,让我一起看看刚刚热乎出炉的“多态”吧。


一、多态概述

多种形态,多种状态

其实这么说那还不如不说,在理解层面就是空白,直接来个例子,比如水果,那水果的类型就多了去了,香蕉、苹果、西瓜、桃子,这些都是水果吧,那么香蕉、苹果、西瓜、桃子其实就是水果的多种形态,抽象一点就是水果的多种状态,这大白话一说可能就好理解得多了。

二、多态实现的条件

必要条件:1、继承
2、重写
java代码的运行实现其实要经过两个过程,编译和运行,而当这两个过程运行时类型不一样,那么多态就会产生。这里要提一下,静态方法不能被重写,所以静态方法就没有多态这一说。

三、多态的作用

把不同子类当做父类来看,屏蔽子类之间的差异,写出通用代码,以适应编程需求的不断变化。

三、多态的转型(重要!!!)

1.向上转型

1、定义一个交通工具的类,只给了一个名字的属性
代码如下(示例):

public class Triffic {
     
	String name;	
	
}

2、在定义一个car的类,将交通工具的类作为父类
代码如下(示例):

public class Car extends Triffic {
     
	
}

3、按照常规的操作我们应该是这样的

public class Test01 {
     

	public static void main(String[] args) {
     
		Car car01 = new Car();
	}

}

4、但是这里有了继承的关系,这样做也太无趣了,要打破局限成就新的高度!!!
代码如下(示例):

public class Test01 {
     

	public static void main(String[] args) {
     
		// 常规操作
		Car car01 = new Car();
		// 向上转化,父类引用指向子类对象
		Triffic triffic = new Car();
		
	}

}

小结

这个咋看感觉一下和以前学的大相径庭,感觉一下干蒙了,其实不然,这个的构造函数还是car,但是car里面的方法属性还是用不到的存在一些遗憾,还有大白话说就是大转小,系统默认转换的,说到遗憾那就得弥补遗憾,Java是一门比较全面的语言,前人的大智慧早就想到了,下面我们继续说一种方法。

2.向下转型

在向上转型的基础上,我们进行向下转型
代码如下(示例):

public class Test01 {
     

	public static void main(String[] args) {
     
		// 常规操作
		Car car01 = new Car();
		// 向上转化,父类引用指向子类对象
		Triffic triffic = new Car();
		// 向下转换, 父类对象强转为子类对象
		Car car02 = (Car) triffic;
	}

}

小结

这样一来不管是父类的还是子类的属性和方法都能尽情调用了,不再受子类对象的气。

四、多态的应用场景

1、函数输入参数的多态

为了演示的直观性更强,在交通工具中的子类中我们在加入一个飞机(airplane).

public class Airplane extends Triffic {
     
	
}

下面我们直接来演示输入参数的多态

public class test01 {
     

	public static void main(String[] args) {
     
		// 输入参数的多态表现
		Triffic triffic2 = new Triffic();
		Car car1 = new Car();
		Airplane airplane1 = new Airplane();
		test(triffic2);
		test(car1);
		test(airplane1);
	}
	// 创建一个参数类型为Triffic,形参为triffic的方法
	public static void test(Triffic triffic) {
     
		System.out.println(triffic);
	}

}

小结

追根溯源其实上面的东西都是一个源,那就是交通工具Triffic,而不管是飞机(airplane),还是汽车(car)都是交通工具的分支,而从另一个角度说,Triffic是airplane和car的父类,所以都它们产生的对象都可以作为实参,体现了输入参数的多样性。

2、函数返回值得多态

public class test01 {
     

	public static void main(String[] args) {
     
	}
	public static Triffic test02(Triffic triffic) {
     
		Triffic triffic2 = new Triffic();
		return triffic2;
	}
	public static Triffic test03(Triffic triffic) {
     
		Car car1 = new Car();
		return car1;
	}
	public static Triffic test04(Triffic triffic) {
     
		Airplane airplane1 = new Airplane();
		return airplane1;
	}

}

小结

尽管在三个方法中,规定的返回值都是Triffic 类的,但是我们可以明确的观察出来,在最后的返回值类型是不一样的,有本身的Triffic,也有car 、airplane,将函数的返回值的多态体现的淋漓尽致。
多态的应用场景还有很多,这里就不一一举例了,由大家自己探索吧,比如接口的多态、继承的多态等等…

总结

Java刚开始的三座大山封装、继承、多态已经快要跨过去了,经过近一个月的Java学习收获很多,总感觉只是点还是很多,难以成线,难以成系统,所以很感谢这个平台,更感谢一路来支持的人,哪怕是一句鼓励的话,我也倍感高兴,因为我能用自己的话总结学习过的东西,还分享出去了,真的很高兴。

你可能感兴趣的:(Java学习日记,java,多态,编程语言)