Java 多态的简单介绍及代码举例

本文详细介绍了Java中的多态性,包括它的定义、实现多态的三个必要条件(继承、方法重写和向上转型),并通过实例代码展示了多态性的运用。多态性允许父类引用调用子类的方法,提供了代码的灵活性和可扩展性,但也限制了对子类特有属性和方法的直接访问。

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

文章目录


前言

本文主要介绍多态,实现多态的条件,及简单的代码举例。

一、多态是什么?

多态是面向对象的第三大特性,用一句话概括来讲就是父类型的变量可以引用子类型的变量,是基类型对象访问派生类重写的方法,意味着父类型的变量可以引用子类型的对象。使用父类对象的对方都可以使用子类的对象。

二、实现多态

实现多态中有三个必要条件:

继承:必须存在有继承关系的子类和父类;

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

1.有继承关系(或通过接口实现)

在这里特此强调子类并不是父类简简单单的子集,子类包含父类所有的类成员,同时还有自己特有的成员变量,所以子类通常包含比父类更多的类成员。

2.要有方法重写

方法重写即在子类中创建了一个与父类中名称相同,返回值类型相同,参数列表的方法相同,只是方法中的实现不同,以实现不同于父类的功能。

当子类和父类在同一个包中,子类可以重写父类中除了声明为private和final方法的方法。

当子类和父类不在同一个包中,子类只能重写父类中声明为public和protected的非final的方法。

3.向上转型

向上转型简单来说就是一个子类类型的对象赋值给一个父类类型的变量,同时注意不要强制转型;向上转型后父类引用不能调用子类自己的方法。

父类类型变量=new 子类类型()  例:People gulf=new male();

在Java中也存在向下转型,但平常应用得的次数并不多,其存在类型转换异常的风险,且实现向下转型之前必须先向上转型,可以用instanceof关键字防止类型转换异常的出现。

下面举多态的一个简单的例子:

package fourth;

public class work {

	public static void main(String[] args) {
		male mew=new male();
		mew.love();
		People gulf=new male(); //父类引用指向子类对象,最终结果会实现子类的方法
		gulf.love();
	}

}
class People{
	public void love() {
		System.out.println("love all");
	}
}
class male extends People{  //即前文提到的要实现多态必须包含继承关系
	public void love() {  //即前文提到的要实现多态必须要有方法重写
		System.out.println("mewgulf love each other forever");
	}
}

两个运行的结果均为“mewgulf love each other”。

下面举一个稍微复杂点的例子:

package fourth;

public class work {

	public static void main(String[] args) {
		People mew=new Nong();
		mew.love();
		Nong gulf=(Nong)mew;
		gulf.like();//调用特有的方法
	}

}
class People{
	public void love() {
		System.out.println("mew loves gulf");
	}
}
class Nong extends People{  
	@Override
	public void love() {
		System.out.println("gulf loves mew");
	}
	public void like() {
		System.out.println("mew loves gulf");
	}
}

运行的结果为“gulf loves mew
                      mew loves gulf”

由上文的例子我们可以很清楚地感受到使用多态的好处,即可以当做形式参数,可以接受任意子类对象,但多态也存在着弊端,即不能使用子类特有的属性和行为。


总结

本文仅仅简单介绍多态的使用,和需要实现多态的前提条件,仅供参考。

最后注意,引用变量也可以是多态的,即它可以存放不同类对象的地址,只要这些类是它声明的对象即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值