java面向对象基础——多态

java面向对象基础——多态

多态的概念

多态指的是同一个方法的调用,由于对象的不同可能会有不同的行为,而在现实生活中,同一种方法,具体实现可能会有所不同,比如人的休息方法,有躺着睡觉,也有躺着玩手机,等不同的行为方法

多态的好处

  1. 可替换性。多态对已存在代码具有可替换性。
  2. 可扩展性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。
  3. 灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
  4. 简化性。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

多态的条件

  1. 多态是方法的多态,不是属性的多态(多态和属性无关)
  2. 要实现多态要满足三个必要条件:必须要有继承,方法的重写,父类引用指向子类对象
  3. 父类引用子类对象的时候,用该父类引用子类的重写方法,此时多态就出现了(向上转型)
代码示例一:
package com.boker.oo;

public class TestPolymorphic {
	public static void main(String[] args) {
		Person person = new Person();	//创建人类对象
		Teacher teacher = new Teacher();	//创建老师对象
		Student student = new Student();	//创建学生对象
		
		rest(person);	//调用静态rest方法,把对象作为参数传递进去
		rest(teacher);
		rest(student);
	}
	//创建静态对象  以父类person为参数类型
	public static void rest(Person a) {
		a.rest();
	}
}
//人类
class Person{
	public void rest() {
		System.out.println("人类需要休息");
	}
}
//老师类
class Teacher extends Person{
	@Override
	public void rest() {
		System.out.println("老师上了一天课,要休息了");
	}
}
//学生类
class Student extends Person{
	@Override
	public void rest() {
		System.out.println("学生听了一天课了,准备写完作业再休息");
	}
}

运行结果:
在这里插入图片描述

代码示例二:
package com.boker.oo;

public class TestPolymorphic {
	public static void main(String[] args) {
		Person person = new Person();	//创建人类对象
		Teacher teacher = new Teacher();	//创建老师对象
		Student student = new Student();	//创建学生对象
		//父类person的方法
		person.rest();
		//子类teacher向上转型,实际调用的是子类的方法
		person = teacher;
		person.rest();
		//子类student向上转型,实际调用的是子类的方法
		person = student;
		person.rest();
	}
}
//人类
class Person{
	public void rest() {
		System.out.println("人类需要休息");
	}
}
//老师类
class Teacher extends Person{
	@Override
	public void rest() {
		System.out.println("老师上了一天课,要休息了");
	}
}
//学生类
class Student extends Person{
	@Override
	public void rest() {
		System.out.println("学生听了一天课了,准备写完作业再休息");
	}
}

运行结果:
在这里插入图片描述

代码示例三:
package com.boker.oo;

public class TestPolymorphic {
	public static void main(String[] args) {
		Person person = new Person();	//创建父类人类对象
		person.rest();
		Person person1 = new Teacher();	//创建子类老师对象,子类向上转型
		person1.rest();
		Person person2 = new Student();	//创建子类学生对象,子类向上转型
		person2.rest();
	}
}
//人类
class Person{
	public void rest() {
		System.out.println("人类需要休息");
	}
}
//老师类
class Teacher extends Person{
	@Override
	public void rest() {
		System.out.println("老师上了一天课,要休息了");
	}
}
//学生类
class Student extends Person{
	@Override
	public void rest() {
		System.out.println("学生听了一天课了,准备写完作业再休息");
	}
}

运行结果:
在这里插入图片描述

可以看见,多态的三个必要条件,缺一不可,其中的向上转型,是否也可以向下转型呢?显然是不能的,比如所有的老师是人类,那所有的人类不可能都是老师吧,但是有一天,有老师离职了,不再是老师了,可是后来他又再找一份老师的工作,那该怎么办呢?这就需要把原来向上转型的再向下转型了(强转)

代码示例:

package com.boker.oo;

public class TestPolymorphic {
	public static void main(String[] args) {
		Person person = new Person();	//创建父类人类对象
		person.rest();
		Person person1 = new Teacher();	//创建子类老师对象,子类向上转型
		person1.rest();
		
		Teacher teacher = (Teacher)person1;		//向下转型(强转)
		teacher.teach();
	}
}
//人类
class Person{
	public void rest() {
		System.out.println("人类需要休息");
	}
}
//老师类
class Teacher extends Person{
	@Override
	public void rest() {
		System.out.println("老师上了一天课,要休息了");
	}
	//老师会教书
	public void teach() {
		System.out.println("教授课程");
	}
}

运行结果:
在这里插入图片描述

注意:这里的强转是指把之前的子类对象向上转型,再转回来,不是把本来是父类的对象强转回去,否则会报类型转换错误异常

好了,关于多态就介绍到这,后期有补充的地方会在评论区发布的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值