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);
    }
}

上一篇:JavaSE编程基础相关面试题(二)


下一篇:JavaSE入门知识总结(学习狂神day01)