多态:同一个行为具有多个不同表现形式或形态的能力。
优点:
1)消除类型之间的耦合关系
2)可替换性
3) 可扩充性
4)接口性
5)灵活性
6)简化性
存在的必要条件:
1)继承
2)重写
3)父类引用指向子类 Parent p=new Child();
父类类名 变量名=new 子类方法
注意:要实现多态的操作:1)方法要在父类(抽象类)中声明过 (抽象方法)
2)在子类中必须重写(方法名、形参、类型相同)
父类Pet的代码
public class Pet {//创建父类
public void toHospital(){//父类的方法
System.out.println("宠物去看病!");
}
}
子类Dog的代码
public class Dog extends Pet {
public void toHospital(){
System.out.println("狗狗去看病");
}
}
子类Cat代码
public class Cat extends Pet {
public void toHospital(){
System.out.println("小猫去看病");
}
}
测试类代码
public class Test {
public static void main(String[] args) {
Pet pet=new Dog();
pet.toHospital();//狗狗看病
pet =new Cat();
pet.toHospital();//小猫去看病
}
}
输出结果
相同的代码却输出了不同的内容,这就体现了代码的多态性。
多态意味着在依次调用中包含的实际类型是子类对象 (Dog)而不是有引用的变量的类型决定(父类)
多态完整过程:
根据上述方法就可以写出拥有多态性的方法。下面我们看看这些方法在测试类的使用:
1、向上转型(子类向父类转换的方法)
语法格式:<父类型><引用变量>new <子类型>();
2 、向下转型
向上转型后,无法调用子类特有的方法.
<子类型><引用变量名>=<子类型><父类型的医用变量>//在判断子类转型是否正常是使用的
向下转型后用父类调用子类方法
public class Test {
public static void main(String[] args) {
Pet pet=new Dog();
if (pet instanceof Dog) {//判断宠物类型,如果是狗狗运行下面代码
pet.toHospital();//狗狗看病
}
pet =new Cat();
if (pet instanceof Cat) {//判断宠物类型,如果是小猫则运行下面代码
pet.toHospital();//小猫去看病
}
}
}
判断类型,主要是为了避免宠物类型与执行代码不符的情况出现.