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

---------------------- 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培训、期待与您交流! ---------------------


你可能感兴趣的:(黑马程序员--java基础--多态)