父类引用指向子类对象——定义一个父类的变量,指向子类的对象

本文深入探讨Java中多态的概念,通过实例讲解父类引用指向子类对象的原理,解释如何利用多态调用子类重写的方法,实现动态连接。

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

我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过

Cat c = new Cat();

实例化一个Cat对象,这个不难理解。但当我这样定义时:

Animal a = new Cat();

这样代表什么意思呢?
我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特:

定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。

所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;

对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

来我们举个栗子:

class Father {
	public void func1(){
		func2();
	} 
	public void func2(){
		System.out.println("AAA");
	}
}
 
class Child extends Father{
	
	public void func1(int i){
		System.out.println("BBB");
		} 
	
	public void func2(){
		System.out.println("CCC");
		}	
}

public class Test {
	public static void main(String[] args) {
		
		Father child = new Child();
		child.func1();//打印结果将会是什么?
  }
}

上面的程序是个很典型的多态的例子。子类Child继承了父类Father,并重载了父类的func1()方法,重写了父类的func2()方法。重载后的func1(int i)和func1()不再是同一个方法,由于父类中没有func1(int i),那么,父类类型的引用child就不能调用func1(int i)方法。而子类重写了func2()方法,那么父类类型的引用child在调用该方法时将会调用子类中重写的func2()。
————————————————
版权声明:本文为优快云博主「Allen_forv」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/Allen_forv/article/details/80771650

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值