面向对象--多态

本文详细介绍了面向对象的多态性,包括定义、实现条件、好处、对象转型(向上转型与向下转型)以及如何使用`instanceof`关键字。多态能够提高代码的解耦合性、可扩展性和灵活性,是面向对象编程中三大特性之一,与封装和继承共同构成了强大的编程基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象的三大核心特性:

  • 封装性
  • 继承性
  • 多态性

一、多态的定义

是指同一行为,具有多个不同表现形式。

二、多态的实现条件

  • 实现继承关系:实现继承关系,是将两个类建立起必要的联系,通过这种联系,展现不同的引用形态。
  • 重写父类方法:重新父类方法,是根据不同子类的不同情况,通过方法重写实现展示效果的不同,效果不同,就展示了类的不同形态。
  • 父类的引用指向子类的对象:通过对父类引用的实例化,实例化出不同的子类对象,最终实现类的多种形态的展示。

示例代码:
飞机类

/**
 * 飞机类
 *
 */
public class Airplane {

	public int wing;//飞机机翼数量
	
	public String engine;//发动机型号
	
	/**
	 * 飞机用途方法
	 */
	public void purpose() {
		System.out.println("我是一架飞机,我能起飞");
	}
}

轰炸机,继承飞机类

/**
 * 轰炸机
 *
 */
public class Bomber extends Airplane{

	public int ammunition;//导弹数量
	
	/**
	 * 轰炸机用途方法
	 */
	public void purpose() {
		System.out.println("我是一架轰炸机,我能发射导弹");
	}
}

民用客机,继承飞机类

/**
 * 民用客机
 *
 */
public class Aircraft extends Airplane{

	public int guest;//载客人数
	
	/**
	 * 民用客机用途方法
	 */
	public void purpose() {
		System.out.println("我是一架民用客机,我能承载普通客人");
	}
}

测试类

public class Test {

	public static void main(String[] args) {
		Aircraft aircraft=new Aircraft();//实例化民用客机类对象
		
		Bomber bomber=new Bomber();//实例化轰炸机类对象
		
		Airplane airplane=null;//创建飞机类引用
		
		airplane=aircraft;//将民用客机对象赋值给飞机类引用
		airplane.purpose();//调用飞机用途方法
		
		airplane=bomber;//将轰炸机对象赋值给飞机类引用
		airplane.purpose();//调用飞机用途方法

	}

}

输出结果

三、多态的好处 

使用多态,我们可以很好的完成代码的解耦合工作,加强代码的可扩展性,使代码更加灵活,在不改变原有方法的情况下使类的可用性提高,灵活性增强。

  • 降低模块的耦合度
  • 增强可以类的可替换性
  • 增强模块的可扩展性
  • 增强模块的灵活性

四、对象转型

向上转型

父类的引用指向子类的对象,称为向上转型。 作用是:提高程序的扩展性。

public class Test {

	public static void main(String[] args) {
		Aircraft aircraft=new Aircraft();//实例化民用客机类对象
		
		Bomber bomber=new Bomber();//实例化轰炸机类对象
		
		Airplane airplane=null;//创建飞机类引用
		
		airplane=aircraft;//将民用客机对象赋值给飞机类引用(向上转型)
		airplane.purpose();//调用飞机用途方法
		
		airplane=bomber;//将轰炸机对象赋值给飞机类引用(向上转型)
		airplane.purpose();//调用飞机用途方法

	}

}

向下转型

将子类的引用指向了父类的对象,该写法是对象的向下转型;向下转型不是自动的,需要强制类型转换符进行转换。作用:实现子类扩展方法的调用。

public class Test {

	public static void main(String[] args) {
		
		Aircraft boeing747=new Aircraft();//实例化子类对象
		
		Airplane plane=boeing747;//将子类对象赋值给父类引用(向上转型)
		
		Aircraft boeing_747=(Aircraft)plane;//将父类对象赋值给子类引用(向下转型)
		
		boeing_747.purpose();//调用子类方法
	}

}

instanceof关键字

instanceof是Java中的一个二元运算符,用来测试一个对象是否为一个类的实例。

public class Test {

	public static void main(String[] args) {

		Airplane airplane=new Bomber();
		System.out.println(airplane instanceof Airplane);
		System.out.println(airplane instanceof Bomber);
		System.out.println(airplane instanceof Aircraft);
	}
}

 五、面向对象的三大特性总结

面向对象的三大特性,为封装、继承、多态。个人认为,继承是三大特性的核心。封装是将代码进行整合,封装后增加代码的聚合度;继承是建立了类与类之间的关系,建立了耦合度;多态是通过重写方式实现不同效果的展示,降低了耦合度。三大特性是一个整体,虽然可以独立使用,但是相互配合,整合起来的代码,更有优势和效果,真正的去实现了代码的高内聚,低耦合。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值