java--多态

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

1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2,多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
3,多态的好处
多态的出现大大的提高程序的扩展性。
4,多态的弊端:
虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。
5,多态的应用
6,多态的出现代码中的特点(多态使用的注意事项)

public class Test 
{
	public static void main(String[] args)
	{ 

		function(new Cat());
		function(new Dog());
		function(new Pig());	
	}
	public static void function(Animal a)
	{
		a.eat();
	}
}

abstract class Animal
{
	abstract void eat();

}

class Cat extends Animal
{
	public void eat()
	{
		System.out.println("吃鱼");
	}
	public void catchMouse()
	{
		System.out.println("抓老鼠");
	}
}

class Dog extends Animal
{
	public void eat()
	{
		System.out.println("吃骨头");
	}
	public void kanJia()
	{
		System.out.println("看家");
	}
}

class Pig extends Animal
{
	public void eat()
	{
		System.out.println("饲料");
	}
	public void gongDi()
	{
		System.out.println("拱地");
	}
}

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

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

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


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();
		
	}
}

结果是:

------1------
Zi_method_1
Fu_method_2
Zi_method_3
------2------
Zi_method_1
Fu_method_2
------3------
5
8
------4------
Fu_method_4
Zi_method_4



你可能感兴趣的:(java--多态)