欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

重温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】------统一方法参数
相关标签: Java java