---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一、多态
格式:Animal a = new Cat();
经典例子:
class Animal{
void method1(){
System.out.println("FU 1");
}
void method2(){
System.out.println("FU 2");
}
}
class Cat extends Animal{
void method1(int i){ //子类重载了父类method1方法
System.out.println("Zi 1");
}
void method2(){ //子类重写了父类method2方法
System.out.println("Zi 2");
}
}
public class Demo{
public static void main(String[] args){
Animal a = new Cat();
a.method1();
a.method1(34);
a.method2();
}
}
以上程序:
1、父类引用指向子类对象
2、a.method1()会调用父类中的method1方法
3、因为父类中没有method1(int i)这个方法,所以a.method1(34)编译出错。
4、a.method2()会调用子类method2方法
总结:
1、父类引用指向子类对象
2、该引用只能够调用父类中定义的属性和变量
3、如果子类复写了父类中的某个方法,那么该引用调用的是子类中的该方法(动态连接、动态调用)
重点易错:
1、当该引用调用非静态方法时,编译能否通过看左边(该引用所属类中是否有这个方法),运行看右边(如果子类复写了该方法就运行子类)
2、多态中如果父类和子类出现了同名变量,那么编译和运行时都看左边,也就是都赋值给父类中的成员变量
3、调用静态方法时,一律写成类名.静态方法
4、对象引用调用方法时,都是先通过引用找到实际对象,然后由对象本身去调用该方法
结论:
静态方法和成员变量(不分静与非):都只看左边
非静态方法: 编译看左边,运行看右边
多态的好处与弊端:
好处:大大提高了程序的可拓展性
弊端:父类引用只能够掉调用父类中的属性和方法或子类中复写父类的方法,而不能够调用子类特有的方法
二、instanceof
格式:a instanceof B
a:是某个类实例的引用变量
B:是某个类的类名
什么时候用instanceof?
当一个类的子类类型很少时,例如性别只分男女,这样就可以用instanceof来进行判断
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net