欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多态

程序员文章站 2022-05-20 10:33:56
...

多态

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

一个对象的实际类型是确定的,但是可以指向对象的引用类型有很多(父类、有关系的类)

注意事项

  1. 多态是方法的多态,没有属性的多态。

  2. 关系:父类和子类、有联系的类。

  3. 存在条件:继承关系,子类需要重写父类方法,父类引用指向子类实例化对象!例如:Father father = new Son();

  4. 什么样的方法不能被重写?

    • static方法:属于类,不属于对象实例
    • final常量
    • 被private修饰的方法
  5. 把子类转换为父类,向上转型,不需要强转。

  6. 把父类转换为子类,向下转型,需要强转,但是在转换过程中会丢失一些自己的方法,因为父类不能直接使用子类的方法,但是子类可以继承父类并且使用。(具体可以与基本数据类型的强制转换进行对比,可以理解为丢失精度

instanceof和类型转换

使用:x instanceod y

编译是否能通过:主要观察x和y之间是否有联系

结果是false还是true:主要看x指向的对象和y之间是否有联系

测试案例:现在给出三条关系线,依次从大到小,来测试一下instanceof的用法:

  1. Object–>Person–>Student

  2. Object–>Person–>Teacher

  3. Object–>String

//父类Person
public class Person {
}

//子类Teacher继承父类Person
public class Teacher extends Person{
}

//子类Student继承父类Person
public class Student extends Person{
}

    public static void main(String[] args) {
        Object obj = new Student();//创建obj的引用指向学生对象
        System.out.println(obj instanceof Student); //true
        System.out.println(obj instanceof Person); // true
        System.out.println(obj instanceof Object); // true
        System.out.println(obj instanceof Teacher);// false
        System.out.println(obj instanceof String); // false

        Person person = new Student();//创建person的引用指向学生对象
        System.out.println(person instanceof Student);// true
        System.out.println(person instanceof Person);// true
        System.out.println(person instanceof Object);// true
        System.out.println(person instanceof Teacher);// false
        //System.out.println(person instanceof String); // 编译报错

        Student student = new Student();//创建student的引用指向学生对象
        System.out.println(student instanceof Student); //true
        System.out.println(student instanceof Person); // true
        System.out.println(student instanceof Object); // true
        //System.out.println(student instanceof Teacher);// 编译报错
       // System.out.println(student instanceof String); // 编译报错
    }