重温java知识(二十、面向对象多态性之二:对象的多态性之对象向上转型)
程序员文章站
2024-03-21 19:16:10
...
对象的多态性(父类与子类实例之间的转换处理);
1、对象的多态性之:对象向上转型【父类 父类实例 = 子类实例,自动完成转换】【父类定义标准,子类定义个性化的实现】例子:
package com.mydemo;
public class MessageDemo {
public static void main(String args[]) {
Message msgA = new DatabaseMessage(); // 向上转型
Message msgB = new NetworkMessage(); // 向上转型
// 调用被覆盖写过的方法
msgA.print();
msgB.print();
}
}
class Message {
/**
* 父类定义print()方法
*/
public void print() {
System.out.println("【父类】------对象向上转型");
}
}
class DatabaseMessage extends Message {
/**
* 方法覆写,子类有不同的方法体
* 运行结果:【子类-DatabaseMessage】------对象向上转型
*
* 不覆写父类的方法,那么调用时,调用的方法就是父类的了
* 运行结果:【父类】------对象向上转型
*/
public void print(){
System.out.println("【子类-DatabaseMessage】------对象向上转型");
}
}
class NetworkMessage extends Message {
/**
* 方法覆写,子类有不同的方法体
* 运行结果:【子类-NetworkMessage】------对象向上转型
*
* 不覆写父类的方法,那么调用时,调用的方法就是父类的了。
* 运行结果:【父类】------对象向上转型
*/
public void print(){
System.out.println("【子类-NetworkMessage】------对象向上转型");
}
}
2、对象向上转型的实际应用的例子【统一方法参数】:
package com.mydemo;
public class MessageDemo {
public static void main(String args[]) {
Channel.send(new DatabaseMessage());
Channel.send(new NetworkMessage());
}
}
class Message {
/**
* 父类定义print()方法
*/
public void print() {
System.out.println("【父类】------对象向上转型");
}
}
class DatabaseMessage extends Message {
/**
* 方法覆写,子类有不同的方法体
*/
public void print() {
System.out.println("【子类-DatabaseMessage】------统一方法参数");
}
}
class NetworkMessage extends Message {
/**
* 方法覆写,子类有不同的方法体
*/
public void print() {
System.out.println("【子类-NetworkMessage】------统一方法参数");
}
}
class Channel {
/**
* 接收Message类对象,
* 由于存在对象自动向上转型的机制,
* 所以可以接收所有子类实例
* @param msg
*/
public static void send(Message msg) {
msg.print();
}
}
运行结果:
【子类-DatabaseMessage】------统一方法参数
【子类-NetworkMessage】------统一方法参数
上一篇: 文件读写和修改
下一篇: 《重构-改善既有代码的设计》第一版