
[info]多态[/info]
多态:如上图,我们有一个打印机超类,有两个子类,子类A打印彩色图片,子类B打印黑白照片,子类A与子类B都有超类的打印功能,而打印出的效果却不同,子类A既有具备了超类打印机的形态,也有自己的形态,这便是多态,不是多种状态,而是多种形态。
/*创建父类*/
public abstract class Animal {
public abstract void eat();
}
/*Cat子类*/
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("吃鱼");
}
}
/*Dog子类*/
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("吃骨头");
}
}
/*测试类*/
public class Test {
public static void main(String[] args) {
//多态形式 创建对象
Animal cat = new Cat();
//调用Cat 的eat
cat.eat();
System.out.println("--------------");
//多态形式 创建对象
Animal dog = new Dog();
//调用Dog 的eat
dog.eat();
}
}
打印输出结果:
吃鱼
--------------
吃骨头
多态类型转换:
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的,当父类引用指向子类对象时,便是向上转型
父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();
向下转型:父类类型向子类类型转换的过程,这个过程时强制的
子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;
为什么要转型:在多态方式调用方法时,首先检查父类是否有该方法,如果没有则编译错误,也就是说不能调用子类独有的方法,如果想调用子类独有的方法,必须做向下转型:
/*创建父类*/
public abstract class Animal {
public abstract void eat();
}
/*Cat子类*/
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("吃鱼");
}
public void watchHouse(){
System.out.println("抓老鼠");
}
}
/*测试类*/ public class Test { public static void main(String[] args) { //向上转型 Animal cat = new Cat(); //调用Cat 的eat cat.eat(); System.out.println("-----------------"); //向下转型 Cat cat1 = (Cat) cat; cat1.watchHouse(); } }
打印输出结果:
吃鱼 ----------------- 抓老鼠
总结:
多态存在的三个条件:继承,重写,父类指向子类对象
多态的优点:消除类型之间的耦合关系,可替换性强 ,可扩充 ,灵活
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
Mount‘s Blog
本文地址: Java三大特性——多态
本文地址: Java三大特性——多态
您必须 登录 才能发表评论