---------------------- android培训、java培训、期待与您交流! ----------------------
多态的应用总结
多态:可以理解为事物存在的多种形态。
人:男人 , 女人
动物:猫,狗
猫 x = new 猫();
动物 x = new 猫();
1,多态的基本体现:
父类的引用指向了自己的子类对象。
父类的引用也也可以接收自己子类的对象。
2,多态的前提:
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提就是:存在覆盖。
3,多态的好处:
多态的出现大大的提高了程序的扩展性。
4,多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类的成员。
5,多态的应用:
* 千万不要出现这样的操作,将父类对象转成子类的类型。 我们能转换的是父类引用指向了自己的子类对象时, 该 引用可以被提升也可以被强制转换。
* 多态自始至终都是子类对象在做着变化。
Animal a = new Animal(); Cat c = (Cat)a; //不对
6,多态的出现代码中的特点(多态使用的注意事项)
class Fu {
int num = 5;
void metod1() {
System.out.println("Fu method_1");
}
void metod2() {
System.out.println("Fu method_2");
}
static void method4() {
System.out.println("Fu method_4");
}
}
class Zi extends Fu {
int num = 8;
void metod1() {
System.out.println("Zi method_1");
}
void metod3() {
System.out.println("Zi method_3");
}
static void method4() {
System.out.println("Zi method_4");
}
}
public class DuoTaiDemo4 {
public static void main(String[] args) {
// Zi z = new Zi();
// z.metod1();//Zi method_1
// z.metod2();//Fu method_2
// z.metod3();//Zi method_3
Fu f = new Zi();
// System.out.println(f.num);// 5
Zi z = new Zi();
// System.out.println(z.num);// 8
// f.metod1();//Zi method_1 子类把父类的method)_1覆盖了。
// f.metod2();//Fu method_2
// f.metod3();//编译失败。
f.method4();// Fu method_4 开发不用,不覆盖静态。
z.method4();//Zi method_4
Fu.method4();
Zi.method4();
* 在多态中成员函数的特点(非静态): 在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编 译通过。如果没有,编译失败。
* 在运行时期:参阅对象所属的类中是否有调用的方法。 简单总结就是:成员函数在多态 调用时,编译看左边, 运行看右边。
* 面试的时候用:
1,在多态中,成员变量的特点: 无论编译还是运行,都参考左边(引用型变量所属的类)。
2,在多态中,静态成员函数的特点: 无论编译和运行,都参考左边。
* 第二个问题:如何去使用子类特有的方法。
如果想要调用猫的特有方法时,如何操作?
强制将父类的引用,转成子类类型。
Cat c = (Cat)a;
* 关于Object类:
Object:是所有对象的直接或者间接父类,就是传说中的上帝。
该类中定义是肯定是所有对象都具有的功能。
Object类中已经提供了对对象是否相同的比较方法。
如果自定义类中也有比较相同的功能,没有必要重新定义。
只要沿袭父类中的功能,建立自己特有比较内容即可。这就是覆盖。
---------------------- android培训、java培训、期待与您交流! ----------------------