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