重温java知识(二十、面向对象多态性之二:对象的多态性之对象向上转型)

对象的多态性(父类与子类实例之间的转换处理);

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】------统一方法参数
发布了149 篇原创文章 · 获赞 4 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/yuzhiboyouzhu/article/details/105705614