多态介绍

多态

  • 即同一方法可以根据发送对象的不同而采用多种不同的行为方式;

  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多;

  • 多态存在的条件

    • 有继承关系
    • 子类重写父类方法
    • 父类引用指向子类对象
  • 注意:多态是方法的多态,属性没有多态性

主方法:

父子:

多态注意事项:

  1. 多态是方法的多态,不是属性的多态,属性没有多态;
  2. 需要父子关系、有联系,不然会报类型转换异常!ClassCastException!
  3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象;Father f1 = new Son();
  • 不能重写的方法:
    • static方法,属于类,不属于实例;
    • final常量;
    • private方法;

  • instanceof

判断一个对象是什么类型

//父子的内容:Object为所有的父类,Person为Student和Teacher的父类;String也是Object的一个子类,但与其它无关

public static void main(String[] args) {
   // System.out.println(X instanceof Y);
    // 第一步判断X和Y之间有父子关系才不会编译出错
    // 第二步判断instanceof左边是不是右边的实例对象,是则true不是则false
    Object object  = new Student();
    System.out.println(object instanceof Student);//true
    System.out.println(object instanceof Teacher);//false
    System.out.println(object instanceof Person);//true
    System.out.println(object instanceof Object);//true
    System.out.println(object instanceof String);//false
}
  • 可以把Object、Person、Student理解为三个包含关系的圆,new了一个Student()对象,那么这个对象的实际位置就在Student这个圆里面;用instanceof比较,就是判断对象的实际位置是否在这个圆里面;

  • 以instanceof左边类名为准,判断A和B是否有父子或者子父关系,如果是,编译通过,不是则报错;编译通过后再判断A是否是B的实例对象或者B子类的实例对象,是则为true,不是为false;

  • instanceof要求比较的两个类具有包含关系;

  • A instanceof B :判断对象A是否是类B或类B的子类创造的对象;

注意区分上述对象和类的意义!!!

  • 类型转换,高转低语法:(低对象名)新数据名;Alt+Enter

posted @ 2023-02-01 23:37  初来乍到的小蜗  阅读(33)  评论(0)    收藏  举报