Java-多态

本文详细解释了Java中的多态概念,包括语法知识、定义(父类引用可指向子类对象)、用法示例(通过继承和向下兼容实现方法调用)。还讨论了将子类对象赋给父类对象和强制转换的逻辑限制。
摘要由CSDN通过智能技术生成

目录

多态的语法知识

多态的定义

多态的用法


多态的语法知识

例1:

把bb发送给aa,相当于将bb在栈中的指针给了aa,aa原来指向自己的对象在堆中的空间,后来指向bb在堆中的一块空间,如图:

多态的定义

一个父类的引用类型变量既可以指向父类对象,也可以指向子类对象,它可以根据当前时刻指向的不同,自动调用不同对象的方法。

多态的用法

多态的用法举例2:

package 多态2;

class A{
	public void f() {
		System.out.println("AAAA");
	}
}

class B extends A{
	public void f() {
		System.out.println("BBBB");
	}
}

class C extends B{
	public void f() {
		System.out.println("CCCC");
	}
}

public class Testpoly_2 {
	static void g(A aa) {//参数是父类对象
		aa.f();
	}//实现一个方法调用三个对象的方法。即使再增添一个类D继承于前面的类,也不用改变这个方法就可以调用新增对象的方法
	
	public static void main(String[] args) {
		A aa = new A();
		B bb = new B();
		C cc = new C();
		g(aa);
		g(bb);//将子类对象赋给父类对象,使aa指向子类对象的空间,所以就可以调用bb.f()
		g(cc);//同理
	}
}

将子类对象赋给父类对象,这也叫做多态的向下兼容。

将子类对象转换成父类对象,能调用的方法只有子类从父类继承或重写的方法,不能调用子类中独有的方法。虽然父类对象的指针已经指向了子类对象的空间,但是java语言的设计者不允许这样来处理,因为父类对象调用子类独有的方法,这在实际问题解决中逻辑上是行不通的。程序举例:

多态的用法举例3:

将父类强制转换为子类,语法上可以,但是逻辑上不正确,没有什么意义,所以在运行时会报错。

但如果加上bb = aa(也可写成A aa2 = new B();),程序运行就正确。这是因为将bb转换成aa,但是aa指向的还是父类对象,父类对象在逻辑上不能强制转换为子类对象,但是将bb赋给aa之后,aa指向的就是子类对象,这时候就可以进行强制转换,从而实现将父类对象转换为子类对象。(也就是说,把狗看作动物是无条件的,但是把动物看作狗的前提是:动物是“指向”狗的)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值