---------------------- android培训、java培训、期待与您交流! ----------------------
多态:可以理解为事物存在的多种体现形态。
1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2,多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
3,多态的好处
多态的出现大大的提高程序的扩展性。
4,多态的弊端:
虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。
5,多态的应用
6,多态的出现代码中的特点(多态使用的注意事项)(需要注意,可以举例来)
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。
如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
例子:
interface A{}
class B implements A
{
public String test()
{
return "yes";
}
}
class Demo
{
static A get()
{
return new B();
}
public static void main(String[] args)
{
A a=get();
System.out.println(a.test());
}
}
编译失败,因为A接口中没有定义test方法。(编译看左边,运行看右边)
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
class Fu
{
int num=4;
void show()
{
System.out.println("showFu");
}
}
class Zi extends Fu
{
int num=5;
void show()
{
System.out.println("showZi");
}
}
class T
{
public static void main(String[] args)
{
Fu f=new Zi();
Zi z=new Zi();
System.out.println(f.num); //结果 4(成员变量:无论编译和运行,都参考左边)
System.out.println(z.num);// 5
f.show(); // showZi(成员函数:编译看左边,运行看右边)
z.show(); // showZi
}
}
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
public classTestOverride{
public staticvoid main(String[] args){
Super s=newSub();//多态
System.out.println(s.a); // 结果10(成员变量:无论编译和运行,都参考左边)
s.ma(); // Sub Ma (成员函数:编译看左边,运行看右边)
s.mb(); // Super Static Mb(静态成员函数无论编译和运行,都参考左边。)
}
}
class Super{
int a=10;
public voidma(){
System.out.println("Super Ma");
}
public staticvoid mb(){
System.out.println("Super Static Mb");
}
}
class Sub extendsSuper{
int a=20;
public voidma(){
System.out.println("Sub Ma");
}
public static void mb(){
System.out.println("Sub Static Mb");
}
}
总结:
一。表现:
父类或者接口的引用指向了或者接收了自己的子类对象。
二。前提:
1,类与类之间要有关系。继承,实现。
2,通常都会有覆盖。
三。好处:
预先定义的程序可以运行后期程序的内容。
增强了程序的扩展性。
四。弊端:
虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。
不能预先使用子类中定义的特有功能。
五。多态的注意事项:
在代码中。
对于成员函数:Fu f = new Zi(); f.method();
编译时期:看左边。运行时期:看右边。
因为成员函数有一个覆盖操作。
对于非私有的实例变量,
静态变量,静态方法。
编译和运行都看左边。
六。转型。
子类对象被父类引用:子类对象在向上转型。
将指向子类对象的父类应用转换成子类类型引用:向下转型。
毕姥爷和毕老师的故事。
class 毕姥爷
{}
class 毕老师 extends 毕姥爷
{}
毕姥爷ly = new 毕老师();//毕老师向上转型为了毕姥爷。向上转型
毕老师ls = (毕老师)ly; //将代表毕老师对象的父类引用ly强制转换成了毕老师类型。向下转型。
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima