zoukankan      html  css  js  c++  java
  • 多态(2019年10月16日)

    多态的定义:同一个行为具有多个不同表现形式或形态的能力

    多态的好处:高类聚,低耦合

    父类引用指向子类对象  

    Person a=new Student();
    a.eat();

    调用看左,执行看右(在eclipse里面,写一个对象a在加一个点号,后面提示的内容就是可以选择的方法,后面也有这个方法是那个类里面的)

    类型的转换包含:1.基本数据类型的转换 2.引用数据类型的转换(继承和接口)

    Person ----------强转-------------Student

    Student----------自动-------------Person

    在可以转换的前提下,向上转自动转,向下转强转。

    自动类型转换:向上转换(比如方法需要传入的参数是一个Person对象,但是你输入了一个Student对象,这就是自动类型装换,在Student对象前面不用手动添加(Person))

    强制类型转换:向下转换,向下强制类型转换的下限为内存当中实际存储的类型

    之前我们已经知道在需要传入Person对象的方法中,我们可以传入一个Student,我们也还可以传入一个Personq其他的子类,如果不同的子类要实现不同的逻辑,我们可以用instanceof来判断是否为我们需要的类型

    public void doSomething(Person p){
      if(p instanceof Student){
          System.out.println("这是学生!");  
      
      }else{
      
        System.out.println("这是学生!")

      }
        }

    instanceof:判断左边的对象是不是右边的类型,返回一个boolean类型的值

    1.左边不能是基本数据类型

    2.左边对象能否进行判断,看能否转换成右边的类型。(如果左边的对象可以自动转换或者强行转换成右边的类型)

    每日一练

    1,java的3大特性是什么?

    封装,继承和多态

    2,概括下多态?

    多态就是同一个行为具有多个不同表现形式或形态的能力,父类引用指向子类对象


    3,由下向上转型需要强转吗?由上向下呢?

    由下向上的转型不需要强转,有上向下的需要强转

    4,假设Student(study方法)继承Person(eat方法),BigStudent继承Student
    Person p = new Student();
    p.study(); // 这行代码有错吗?为什么?
    BigStudent bs = (BigStudent ) p;// 这行代码有错吗?为什么?

    第二段代码有错,因为在创建对象的时候p的类型为Person类,而这个类中没有study方法
    第三段代码有错,因为p的实际类型为Student类型,只能在Student类型的父类之间转换,不能将p转换成他的子类(BigStudent)类型

  • 相关阅读:
    js直接获取当前windows登陆账号---仅适用于IE
    Windows变量路径与通配符
    IDEA数据库生成Entity 带注释, 默认值
    BIM+区块链在建筑业施工过程结算的应用
    Java中动态规则的实现方式
    Git查看本地仓库关联关系以及清理无效远程分支
    Golang把字符串数组、[]interface{}打乱、切片乱序
    Golang将map数组按照指定字段排序
    Golang把时间和数字相乘报错invalid operation: second * time.Second (mismatched types int and time.Duration)
    Golang获取明日时间及距离明日凌晨的时间差
  • 原文地址:https://www.cnblogs.com/Starlets/p/11686602.html
Copyright © 2011-2022 走看看