十六.多态性

本文详细介绍了Java中的多态性概念,包括其定义、前置条件和应用场景。通过实例展示了如何进行对象的向上和向下转换,以及如何利用`instanceof`关键字进行类型判断。多态性是Java三大特性之一,它允许同一个行为在不同类中有不同的实现,增强了代码的灵活性和可扩展性。

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

多态性简介

java三大特性之一件事多态,同一个行为以多种不同的方式表现出来。
就是以同一个引用对象调用的同一个方法显示不同东西,而且必须是在运行期间才能确定该引用对象指向的是哪一个类的实例对象,调用的是哪一个类中的实现方法。

就好比一个打印机,可以分为彩色打印机打印彩色照片或者黑白打印机打印出黑白照片。

多态前置条件:

  • 继承:多个或者一个子类继承父类的关系
  • 重写:子类重写父类的方法

语法:

父类类型 对象名 = new 子类类型();
/**
 * 打印机
 * @author Administrator
 *
 */
class Printer {
	
	public void show(){
		System.out.println("打印照片");
	}
}

class ColorsPrinter extends Printer{
	public void show(){
		System.out.println("打印彩色照片");
	}
}

class BlackPrinter extends Printer{
	public void show(){
		System.out.println("打印黑白照片");
	}
}

class Test1{
	
	public static void main(String[] args) {
		Printer c = new ColorsPrinter();
		Printer b = new BlackPrinter();
		c.show();			//彩色照片
		b.show();			//黑白照片
	}
	
}

对象向上转换(upcasting)

向上转换就是把子类对象直接赋值给父类引用,不用强制转换,可以说调用父类的所有成员,不能调用子类特有的成员,最终运行看子类的具体实现。
语法:

父类类型  对象名 = new 子类类型(); 或者	接口名称  对象名 = new 子类类型();	
class Printer {
	
	public void show(){
		System.out.println("打印照片");
	}
}

class BlackPrinter extends Printer{
	public void show(){
		System.out.println("打印黑白照片");
	}
}

class Test1{
	
	public static void main(String[] args) {
		Printer b = new BlackPrinter();	//向上转换
		b.show();			
	}
}

对象向下转换

向下转换就可以调用子类的所有成员,注意父类引用的是子类对象,那么在运行中向下转换的过程是安全的,如果父类引用的是本类对象,那么在运行中向下转换会发生Java 强制类型转换异常,一般使用 instanceof 运算符来避免出此类错误。

语法:

父类类型 对象名1 = new 子类类型(),
子类类型 对象名2 = (子类类型)对象名1;

class Printer {
	
	public void show(){
		System.out.println("打印照片");
	}
}

class BlackPrinter extends Printer{
	public void show(){
		System.out.println("打印黑白照片");
	}
}

class Test1{
	
	public static void main(String[] args) {
		Printer b = new BlackPrinter();			//向上转换
		BlackPrinter p = (BlackPrinter)b;		//向下转换
		
		p.show();
	}
	
}

instanceof关键字

用来判断左边的对象是否是右边的实例,返回的boolean类型数据。

就相当于是==,>,<,因为对于子类也算是父类对象的实例

class Printer {
	
	public void show(){
		System.out.println("打印照片");
	}
}

class ColorsPrinter extends Printer{
	public void show(){
		System.out.println("打印彩色照片");
	}
}

class BlackPrinter extends Printer{
	public void show(){
		System.out.println("打印黑白照片");
	}
}

class Test1{
	
	public static void main(String[] args) {
		Printer b = new BlackPrinter();		
		
		System.out.println(b instanceof Printer);			//true
		System.out.println(b instanceof BlackPrinter);		//true
		System.out.println(b instanceof ColorsPrinter);		//false
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值