天天看点

黑马程序员--多态1.多态

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.多态

定义:某一类事物的多种存在形态

例:动物中猫,狗

猫这个对象对应的类型是猫类型

         猫 x=new 猫();

同时猫也是动物中的一种,也可以把猫称为动物

动物 y=new 猫();

动物是猫和狗具体事物中抽取出来的符类型

1.1多态的表现形式

         父类的引用指向了自己的子类对象

         父类的引用也可以接受自己的子类对象

1.2多态的前提

         必须是类与类之间有关系.要么继承,要么实现

         通常还有一个前提:存在覆盖

1.3多态的好处

         多态的出现大大的提高了程序的扩展性

1.4多态的弊端;

         提高了扩展性,但是只能使用父类的应用访问类中的成员

多态的应用:

abstract class Student
{
	public abstract void study();//定义一个抽象的学生类,因为不同的班学习内容是不同的,使用抽象方法
	public void sleep(){
		System.out.println("sleep");
	}
}
class BaseStudent extends Student
{
	public void study(){//子类实现父类的抽象方法
		System.out.println("base study");
	}
	public void sleep(){
		System.out.println("base sleep");
	}
}

class AdvStudent extends Student
{
	public void study(){
		System.out.println("adv study");
	}
	public void sleep(){
		System.out.println("adv sleep");
	}
}
class DuoTai
{
	public static void main(String[] args){
		
		Student b=new BaseStudent();
		doIt(b);
	}
	private static void doIt(Student s){
		s.study();
		s.sleep();
	}	
}
           

1.5多态的出现代码中的特点(多态使用的注意事项)

在多态中成员函数的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法.如果没有编译失败

在运行时期:参阅对象属性的类中是否有调用的方法

简单总结就是:成员函数在多态调用时,编译看左边,运行看右边

面试:开发用不到

1.成员变量

class Fu 
{
	int num=5;
}
class Zi extends Fu
{
	int num=7;
}
class DuoTai01
{
	public static void main(String[] args){
		Fu f=new Zi();
		System.out.println(f.num);
		Zi z=new Zi();
		System.out.println(z.num);
	}
}<strong>
</strong>
           
执行结果:
           
5
           
7
           

在多态中成员变量的特点:

无论编译和运行,都参考左边(引用型变量所属的类)

2.静态方法:

class Fu 
{
	int num=5;
	static void method1(){
		System.out.println("Fu method");
	}
}
class Zi extends Fu
{
	int num=7;
	static void method1(){
		System.out.println("Zi method");
	}
}
class DuoTai01
{
	public static void main(String[] args){
		Fu f=new Zi();
		f.method1();
		Zi z=new Zi();
		z.method1();
	}
}
           
执行结果:
           
Fu method
           
Zi method
           

在多态中,静态成员函数的特点:

无论编译和运行,都参考左边

接口型引用指向自己的子类对象

接口的出现提高了功能扩展性

接口型引用指向子类对象提高了程序的扩展性

接口降低了耦合性,提高了功能扩展性,提供了规则

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------