Java学习之路--多态
来源:互联网 发布:多用户建站cms系统 编辑:程序博客网 时间:2024/05/17 07:17
Java 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态性是对象多种表现形式的体现。
现实中,比如我们按下 F1 键这个动作:
--如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
--如果当前在 Word 下弹出的就是 Word 帮助;
--在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
多态存在的三个必要条件:
--继承
--重写
--父类引用指向子类对象
比如:
Parent p = new Child();当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
以下是一个多态实例的演示,详细说明请看注释:
public class Test { public static void main(String[] args) { show(new Cat()); // 以 Cat 对象调用 show 方法 show(new Dog()); // 以 Dog 对象调用 show 方法 Animal a = new Cat(); // 向上转型 a.eat(); // 调用的是 Cat 的 eat Cat c = (Cat)a; // 向下转型 c.work(); // 调用的是 Cat 的 catchMouse } public static void show(Animal a) { a.eat(); // 类型判断 if (a instanceof Cat) { // 猫做的事情 Cat c = (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a; c.work(); } } }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("看家"); } }
执行以上程序,输出结果为:
吃鱼抓老鼠吃骨头看家吃鱼抓老鼠
例子:
1、
class Father {private int money;public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv {public static void main (String args[]) {Son son = new Son();Daughter daughter = new Daughter();Father f = son; /* */f.printInfo();//f.playGame();f = daughter;f.printInfo();}}
运行结果:
This is sonThis is daughter
向下转换,分别调用son,daughter的printInfo方法。
2、
class Father { private int money; public int getMoney() {return money; } public void setMoney(int money) {this.money = money; } public void printInfo() {System.out.println("This is Father");}}class Son extends Father{ public void printInfo() {System.out.println("This is son");} public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{ public void printInfo() {System.out.println("This is daughter");}}public class Cnv2 { public static void main (String args[]) { Father f = new Son(); f.printInfo(); Son son = (Son)f; /* Son son = new Son(); */ son.printInfo(); }}
运行结果:
This is sonThis is son
class Father {private int money;public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv3 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();print(f);print(s);print(d);}public static void print(Father f) {f.printInfo();}public static void print(Son s) {s.printInfo();}public static void print(Daughter d) {d.printInfo();}}
运行结果:
This is FatherThis is sonThis is daughter
class Father {private int money;public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv4 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();print(f);print(s);print(d);}public static void print(Father f) {f.printInfo();}}运行结果:
This is FatherThis is sonThis is daughter
class Father {private int money;public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}public void drink() {System.out.println("drink ...");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}public void dance() {System.out.println("dance ...");}}public class Cnv5 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();printAction(f);printAction(s);printAction(d);}public static void printAction(Father f) {if (f instanceof Son) {Son son = (Son)f;son.playGame();}else if (f instanceof Daughter) {Daughter d = (Daughter)f;d.dance();}else if (f instanceof Father) {f.drink();}}}运行结果:
drink ...playGame ...dance ...
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。
结论:由以上五个例子可以清晰的分析出来java多态的各种特性。
0 0
- Java学习之路--多态
- java学习之-多态
- java 学习之 多态
- JAVA学习之路
- 学习java之路
- Java学习之路
- java学习之路
- Java学习之路
- Java学习之路
- java学习之路
- Java学习之路
- java学习之路
- Java学习之路
- JAVA学习之路
- java学习之路
- Java学习之路
- java学习之路
- JAVA 学习之路
- 内存缓存LruCache实现原理
- Hadoop(07) MapReduce原理
- Android Studio 汉化包
- 活久见的重构 - iOS 10 UserNotifications 框架解析
- 5
- Java学习之路--多态
- javascript时间格式代码
- 前端开发 环境搭建
- Shell下的作业管理
- LeetCode[230] Kth Smallest Element in a BST
- Deepin搭建Qt5开发环境
- codeforces 719C Efim and Strange Grade (复杂模拟)
- 总结一下学习Designated Initializer的过程
- 简单的透明shader