多态

本文介绍了面向对象编程中多态的概念及其应用场景。多态是指子类可以被当作父类来使用,通过父类引用调用子类重写的方法,使得程序更加灵活和可扩展。文章通过示例解释了多态如何提升代码的复用性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

概念

1.多态的体现
    父类的引用指向了自己的子类对象。
    父类的引用也可以接收自己的子类对象。

2.多态的前提
    必须是类与类之间有关系。要么继承,要么实现。
    通常还有一个前提:存在覆盖。

3.多态的好处
    多态的出现大大的提高程序的扩展性。

4.多态的弊端:
    虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。

多态:
1.多态的概念发展出来,是以封装和继承为基础的。
2.概念:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
3.理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。子类以父类的身份出现需要向上转型(upcast),
    其中向上转型是由JVM自动实现的,是安全的,但向下转型(downcast)是不安全的,需要强制转换。
    子类以父类的身份出现时自己特有的属性和方法将不能使用。

demo

public class DuoTaiDemo {
    public static void main(String[] args) {
        DoStudent ds = new DoStudent();
        ds.doSome(new BaseStudent());
        ds.doSome(new AdvStudent());
    }
}

class DoStudent {
    public void doSome(Student stu) {
        stu.sleep();
        stu.study();

        if (stu instanceof AdvStudent) {// 用于判断对象stu是否属于AdvStudent类型。
            AdvStudent as = (AdvStudent) stu;
            as.doWork();
        }
    }

}

abstract class Student {
    public abstract void study();

    public void sleep() {
        System.out.println("睡觉");
    }
}

class BaseStudent extends Student {
    public void study() {
        System.out.println("BaseStudent学习");
    }
}

class AdvStudent extends Student {
    public void study() {
        System.out.println("AdvStudent学习");
    }

    public void doWork() {
        System.out.println("工作");
    }
}

demo2

/*
 需求:
 电脑运行实例,电脑运行基于主板。
 主板通过PCI连接接声卡和网卡
 */

interface PCI {
    public void open();

    public void close();
}

class MainBoard {
    public void run() {
        System.out.println("mainboard run");
    }

    public void usePCI(PCI p) {
        if (p != null) {
            p.open();
            p.close();
        }
    }
}

class NetCard implements PCI {
    public void open() {
        System.out.println("netcard open");
    }

    public void close() {
        System.out.println("netcard close");
    }
}

class SoundCard implements PCI {
    public void open() {
        System.out.println("soundCard open");
    }

    public void close() {
        System.out.println("soundCard close");
    }
}

class DuoTaiDemo3 {
    public static void main(String[] args) {
        MainBoard mb = new MainBoard();
        mb.run();
        mb.usePCI(null);
        mb.usePCI(new NetCard());
        mb.usePCI(new SoundCard());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值