光谷网站推广,wordpress端口修改,网站好玩新功能,湖南网站优化代运营生活中的多态 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口#xff0c;使用不同的实例而执行不同操作#xff0c;如图所示#xff1a; 现实中#xff0c;比如我们按下 F1 键这个动作#xff0c;同一个事件发生在不同的对象上会产生不同的结果。…生活中的多态 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口使用不同的实例而执行不同操作如图所示 现实中比如我们按下 F1 键这个动作同一个事件发生在不同的对象上会产生不同的结果。
如果当前在浏览器界面下弹出的就是浏览器的帮助文档如果当前在 Word 下弹出的就是 Word 帮助在 Windows 下弹出的就是 Windows 帮助和支持。 三个必要条件
继承子类继承父类重写子类重写了父类的方法方法名和父类同名则称为子类重写了父类的这个方法父类引用指向子类对象 class Shape {void draw() {}
}class Circle extends Shape {void draw() {System.out.println(Circle.draw());}
}class Square extends Shape {void draw() {System.out.println(Square.draw());}
}class Triangle extends Shape {void draw() {System.out.println(Triangle.draw());}
}
多态的实现方式 方式一重写 方式二接口 方式三抽象类和抽象方法 多态示例演示 当使用多态方式调用方法时首先检查父类中是否有该方法如果没有则编译错误如果有再去调用子类的同名方法。 要想调用父类中被重写的方法则必须使用关键字 super。 向上转型Animal a new Cat();父类引用指向子类对象 向下转型Cat c (Cat)a;子类引用指向父类对象 //动物类
abstract class Animal { abstract void eat();
}
//猫类
class Cat extends Animal { public void eat() { System.out.println(吃鱼); } public void work() { System.out.println(抓老鼠); }
}
//狗类
class Dog extends Animal { public void eat() { System.out.println(吃骨头); } public void work() { System.out.println(看家); }
}
public class Test {public static void show(Animal a) {//调用eat方法a.eat(); // 类型判断如果对象是猫执行猫做的事如果是狗执行狗做的事if (a instanceof Cat) {Cat c (Cat)a; // 猫做的事情 c.work(); } else if (a instanceof Dog) {Dog c (Dog)a;// 狗做的事情 c.work(); } } public static void main(String[] args) {// 以 Cat 对象调用 show 方法show(new Cat());// 以 Dog 对象调用 show 方法show(new Dog());}
}
例子解析结合代码仔细分析 show方法的参数是Animal对象即父类对象。 main方法中第一次调用show方法传入了子类对象使用向上转型将子类对象Cat转为父类对象Animal的引用a进入方法后使用父类对象的引用a调用了eat方法检查父类中是否有eat方法如果没有则编译错误如果有则调用子类的同名方法所以打印“吃鱼”。if语句中判断对象a属于Cat类的实例使用向下转型将父类对象Animal的引用a转换为了子类对象Cat的引用c使用子类对象的引用c调用work方法所以打印“抓老鼠”。 main方法中第二次调用show方法传入了子类对象使用向上转型将子类对象Dog转为父类对象Animal的引用a进入方法后使用父类对象的引用a调用了eat方法检查父类中是否有eat方法如果没有则编译错误如果有则调用子类的同名方法所以打印“吃骨头”。if语句中判断对象a属于Dog类的实例使用向下转型将父类对象Animal的引用a转换为了子类对象Dog的引用c使用子类对象的引用c调用work方法所以打印“看家”。
多态的优点
消除类型之间的耦合关系修改维护更方便简单。可替换性对已存在代码具有可替换性。可扩充性增加新的子类不影响已存在类的多态性、继承性以及其他特性的运行和操作。接口性向子类提供了一个共同接口由子类来完善或者覆盖它而实现的。灵活性它在应用中体现了灵活多样的操作提高了使用效率。简化性多态简化对应用软件的代码编写和修改过程尤其在处理大量对象的运算和操作时这个特点尤为突出和重要。