黑马程序员--java基础--多态

本文深入解析了面向对象编程中的多态概念,详细介绍了多态的表现形式、前提条件、优势及限制,并通过具体代码示例展示了多态在成员函数、成员变量及静态成员函数中的工作原理。

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

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ---------------------


多态:可以理解为事物存在的多种体现形态。

人:男人,女人
动物:猫,狗。
猫 x = new 猫();
动物 x = new 猫();

一、表现:

父类或者接口的引用指向了或者接收了自己的子类对象。

二、前提:
1,类与类之间要有关系。继承,实现。
2,通常都会有覆盖。

三、好处:
预先定义的程序可以运行后期程序的内容。
增强了程序的扩展性。

四、弊端:
虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。
不能预先使用子类中定义的特有功能。

五、多态的注意事项:
在代码中。
对于成员函数:Fu f = new Zi(); f.method();
编译时期:看左边。
运行时期:看右边。
因为成员函数有一个覆盖操作。

对于非私有的实例变量,
静态变量,静态方法。

编译和运行都看左边。

六。转型。
子类对象被父类引用:子类对象在向上转型。

将指向子类对象的父类应用转换成子类类型引用:向下转型。



在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。

在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。


/*
多态中成员变量,成员函数的情况
*/

class Fu
{
	int num=5;
	void mathod1()
	{
		System.out.println("Fu_method_1");
	}
	void mathod2()
	{
		System.out.println("Fu_method_2");
	}
	static void mathod4()
	{
		System.out.println("Fu_method_4");
	}
}


class Zi extends Fu
{
	int num=8;
	void mathod1()
	{
		System.out.println("Zi_method_1");
	}
	void mathod3()
	{
		System.out.println("Zi_method_3");
	}
	static void mathod4()
	{
		System.out.println("Zi_method_4");
	}
}



class  DuotaiTest
{
	public static void main(String[] args) 
	{
		System.out.println("------1------");
		Zi z=new Zi();
		z.mathod1();
		z.mathod2();
		z.mathod3();
		
		System.out.println("------2------");
		Fu f=new Zi();
		f.mathod1();
		f.mathod2();
		//f.mathod3();  //无法编译
		
		System.out.println("------3------"); //本段面试常用
		Fu f1=new Zi();           
		System.out.println(f1.num);
		Zi z1=new Zi();
		System.out.println(z1.num);
		
		System.out.println("------4------"); //本段面试常用
		Fu f2=new Zi();
		f2.mathod4();
		Zi z2=new Zi();
		z2.mathod4();
		
	}
}

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ---------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值