java第一阶段-JavaSE-Day12-多态

一、多态

        1.概述

        多态:同一个事物个体的多种表现形态

        比如:一个人在学校里的角色是学生,回到家里是父亲的儿子,爷爷的孙子,老婆的老公,一个人在不同场景下可以有不同的角色。

        java中事物的个体就是类的对象,多态就是同一个对象的多种表现形式

        java中对象的正常形态通过变量体现,比如:学生类的对象创建出来存到一个变量,变量依托数据类型

        Student s = new Student();

        java对象的多种形态通过变量的不同数据类型体现

        存放一个对象的变量的数据类型可以不一样,但是不能随便写,有要求的。前提:要存在继承或者接口实现关系。

        Teacher t = new Student();//不合法

        Student 继承Person

        Student s = new Student();

        Person p = s;//合法

        多态体现时的对象也不能是随意的一个对象,应该是子类的对象

        接口下的多态

        接口:PoliceDog

        Dog类实现PoliceDog,相当于继承了这个接口

        Dog d = new Dog();

        PoliceDog pd = d;

        父类或者接口类型的引用,指向子类或者实现类对象

        而且多态的存在时合理的

        特点:

        父类的引用指向子类对象

        父类引用:父类类型的变量

        指向子类对象:父类类型的变量存放了子类对象的地址值

        或

        接口类型引用指向实现类对象

        接口类型引用:接口类型的变量

        指向实现类对象:接口类型的变量存放了实现类对象的地址值

        格式:

        父类名 变量【对象名】 = new 子类名(实参);

        接口名 变量名 = new 实现类(实参);

        只要出现上面的格式,就发生了多态

       

public class Person {
   //Dog g = new Dog();
}
public class Student extends Person {
}
public class UseStudent {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s);
        Person p = new Student();
        System.out.println(p);
    }
}

2.多态的弊端和好处

一旦产生多态,就相当于缩小了真实类型对象的访问范围,因为只能访问到父类中有的内容,或者是父子类中都出现的内容,子类独有的内容就访问不到了

好处:

增强了代码的扩展性,提升代码复用性

综合案例:

public interface USB {
    void openIt();
    void closeIt();
}
public class KeyBord implements USB{
    @Override
    public void openIt() {
        System.out.println("打开键盘");
    }

    @Override
    public void closeIt() {
        System.out.println("关闭键盘");
    }
    public void use(){
        System.out.println("打字");
    }
}
public class Mouse implements USB {
    @Override
    public void openIt() {
        System.out.println("打开鼠标");
    }

    @Override
    public void closeIt() {
        System.out.println("关闭鼠标");
    }
    public void use(){
        System.out.println("点击");
    }
}
public class NoteBook {
    public void open(){
        System.out.println("open");
    }
    public void close(){
        System.out.println("close");
    }
    public void useUSBDriver(USB usb){
        open();
        usb.openIt();
        usb.closeIt();
        close();
    }
}
public class Test {
    public static void main(String[] args) {
        NoteBook n = new NoteBook();
        Mouse m = new Mouse();
        n.useUSBDriver(m);
        KeyBord k = new KeyBord();
        n.useUSBDriver(k);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇正经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值