多态性
可以理解为事物存在的多种体现形态。
abstract class Animal {
public abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("fish");
}
public void catchMouse() {
System.out.println("Catch Mouse");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("bone");
}
public void kanJia() {
System.out.println("KAanJia");
}
}
class DuotaiDemo {
public static void man(String[] args) {
Animal c = new Cat(); // 多态的体现
Animal d = new Dog(); // 多态的体现
fun(new Cat()); // 多态的出现大大提高了程序的扩展性
}
public static void fun(Animal a) // 提高了代码的复用性
{
a.eat();
}
}
-
多态的体现
父类的引用指向自己的子类对象,父类的引用也可以接收自己的子类对象
父类父类引用 = new子类实例(Animal c = new Cat())
-
多态的前提
必须是类与类之间必须有关系,要么继承,要么实现,并且存在覆盖
-
多态的转型
向上转型(自动完成) 父类父类引用 = new子类实例(Animal c = new Cat())
向下转型(强制转换) 子类子类引用 = (子类)父类引用(Cat c1 = (cat)c)
能够进行向下转型的只能是子类进行向上转型的父类应用转换成原来的子类
*instanceof关键字
Instanceof是Java中的二运运算符,也是Java中的保留关键字,作用是测试左边的对象是否是右边类的实例
Cat c= new Cat();
If(c instanceof Cat)
System.out.println(“c是Cat的实例”);
*多态中非静态成员函数的特点:
在编译时期:参阅父类中是否有调用的方法,如果有则编译通过,否则编译失败
在运行时期:运行子类的方法
*多态中成员变量的特点
无论编译还是运行,都参考左边(引用变量所属的类)
class Fu {
int x = 5;
public static void method() {
System.out.println("Fu method");
}
}
class Zi extends Fu {
int x = 8;
public static void method() {
System.out.println("Zi method");
}
public static void main(String[] args) {
Fu z = new Zi();
System.out.println(z.x); // 结果为5
Zi z1 = new Zi();
System.out.println(z1.x); // 结果为8
}
}
*多态中静态成员函数的特点
无论编译还是运行,都参考左边(引用变量所属的类)
public static void main(String[] args)
{
Fuzi = new Zi();
zi.method(); //结果是Fu method
Zizi = new Zi();
zi.method(); //结果是Zi method
}
-
多态的好处
多态的出现大大的提高了程序的扩展性。
-
多态的弊端
只能使用父类的引用访问父类中的成员,而不能访问子类所特有的成员。
----------------------Android培训、Java培训、期待与您交流! ----------------------