• 面向对象--多态


    1    多态概述

    多态是继封装、继承之后,面向对象的第三大特性。

    最终多态体现为父类引用变量可以指向子类对象。

    多态的定义格式:就是父类的引用变量指向子类对象

    父类类型  变量名 = new 子类类型();

    变量名.方法名();

    2   多态-成员的特点

    public class Person {
        int a=0;
        public void speak(){
            System.out.println("这是父类的方法");
        }
    }
    
    public class Student extends Person{
        int a=1;
        public void speak(){
            System.out.println("这是子类的方法");
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            //多态
            //父类引用指向子类对象成员变量特点:编译运行看左边
            //编译看父类,如果父类有,则访问父类的成员变量
            //如果父类没有,则编译失败
            Person p=new Student();
            System.out.println(p.a);
            //成员方法:编译看左边,运行看右边
            //编译看父类,如果父类有,则编译成功,运行时子类重写后的方法,如果父类没有,则编译失败
            p.speak();
            //判断p是否属于人类
            System.out.println(p instanceof Person);
            System.out.println(p instanceof Student);
        }
    }

    3  instanceof关键字和多态-转型

    子类类型 变量名 = (子类类型) 父类类型的变量;

    如:Student stu = (Student) p;  //变量p 实际上指向Student对象

    l  什么时候使用向下转型

    当要使用子类特有功能时,就需要使用向下转型。

    l  什么时候使用向上转型:

    当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。

    总结:

    总结下封装、继承、多态的作用:

    l  封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式

    l  继承:子类会自动拥有父类所有可继承的属性和方法。

    l  多态:配合继承与方法重写提高了代码的复用性与扩展性;如果没有方法重写,则多态同样没有意义。

  • 相关阅读:
    create-react-app 修改 webpack output.publicPath
    洛谷 P1282 多米诺骨牌 (01背包)
    UVa 1627
    UVa 1626
    UVa 11584
    UVa 11400
    UVa 116
    UVa 1347 Tour (dp)
    树形背包小结
    数据流图题目一
  • 原文地址:https://www.cnblogs.com/quanjunkang/p/10616520.html
Copyright © 2020-2023  润新知