zoukankan      html  css  js  c++  java
  • Java学习笔记之多态

    多态概述

    1,多态是Java继封装,继承之后的第三大特性

    2,从字面意思来看可以理解为事物的多种形态,比如某某同学既可以是,又可以是学生,出现两种形态

    3,多态体现为父类对象引用子类实例

    1 //  定义格式:父类类型 变量名=new 子类类型();
    2     Person p = new Student();

    4,前提条件:必须有子父类关系

    多态使用时的特点

    1,多态成员属性:调用,执行向左看

    1 Person p=new Student();
    2 System.out.println(p.age);//p是Person中的值,只能取到父类的值

    2,多态成员方法:调用向左看,执行向右看

    1 Person p=new Student();
    2 System.out.println(p.eat());//p的门面类型是Person ,但实际类型是Student,所以调用的是重写后的方法。

    如何理解呢?p实际类型是Student类  但Person限制了p使用Student类独立Person类之外的属性和方法(这就是向左看,p只能调用Person及其父类的属性和方法)

                          如果子类中重写了父类的方法,执行的时候会调用重写后的方法(这就是向右看)

    多态的类型转换

    多态的转型分为向上转型和向下转型两种

    向上转型:多态本身就是向上转型过的过程

              使用格式:父类类型 变量名=new 子类类型();

              适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

    向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型(有限制

              使用格式:子类类型 变量名=(子类类型) 父类类型的变量

              适用场景:当要使用子类特有功能时。

    1 //假设Person是父类,Student继承Person,BigStudent继承Student
    2 Person p=new Student();
    3 
    4 //这是正确的,p能否下转为Student取决于p的实际类型
    5 Student s=(Student)p;
    6 
    7 //这是错误的,Student已经是p能下转的下限,但这个编译时不会报错,运行时才会
    8 BigStudent bs=BigStudent (p);

    小贴士:编译错误:编写代码时出现的红线和红×

                  运行错误:运行时控制台抛出的错误显示

    instanceof关键字

    用来判断某个对象是否属于某种数据类型。

    注意: 返回类型为布尔类型

    if(p instanceof Student){
        ((Student) p).study(); 
    }else if(p instanceof Teacher){
        ((Teacher) p).goClass();
    }
  • 相关阅读:
    SpringBoot2.1.6 整合CXF 实现Webservice
    一次线上CPU高的问题排查实践
    SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】
    Web服务器☞Apache VS Nginx
    PHP 遍历一个文件夹下所有文件和子文件夹的方法
    PHP 使用 header 方式实现文件下载功能
    PHP gd 库添加 freetype
    MySQL varchar 最大长度,text 类型占用空间剖析
    S.O.L.I.D: PHP 面向对象设计的五个基准原则
    PHP不重新编译,单独添加模块扩展的方法
  • 原文地址:https://www.cnblogs.com/sunzhiqiang/p/11687026.html
Copyright © 2011-2022 走看看