多态 2021-06-12

Posted 超霸霸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态 2021-06-12相关的知识,希望对你有一定的参考价值。

知识点

  • 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式
  • 一个对象是实际类型是确定的,但可以指向对象的引用的类型有很多
  • 多态存在的条件:
    1. 有继承关系
    2. 子类重写父类的方法
    3. 父类引用指向子类对象
  • 注意:多态是方法的多态,属性没有多态性
  • instanceof

实例演练

  1. 定义一个父类Perosn类,并定义一个run方法,代码如下:
//父类——Person类
public class Person {
    public void run(){
        System.out.println("run");
    }
}
  1. 定义一个子类Student类,并定义两个方法run和eat,代码如下:
public class Student extends Person{
    @Override
    public void run(){
        System.out.println("run");
    }
    public void eat(){
        System.out.println("eat");
    }
}
  1. 定义一个main类,代码如下:
public class main {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        //new Student();
        //new Person();

        //可以指向的引用类型就不确定了:父类的引用指向子类

        //Student能调用的方法都是自己的或者继承父类的
        Student s1=new Student();
        //Person父类型,可以指向子类,但是不能调用子类独有的方法
        Person s2=new Student();
        Object s3=new Student();

        //对象能执行哪些方法,看对象左边的类型,和右边关系不大
        s1.eat();
        s1.run();
        s2.run();  //子类重写了父类的方法,执行子类的方法
     }
}

运行结果如下:

在这里插入图片描述

可以看出:

  1. 对象能执行哪些方法,看对象左边的类型,和右边关系不大(s2只能执行run方法,不能执行eat方法)
  2. 如果子类重写了父类的方法,则调用时执行子类的方法
  3. 一个对象的实际类型确定,但指向的引用类型不确定(父类的引用指向子类)
  • 若想在父类中执行子类的方法,则需要用到强制转换
public class main {
    public static void main(String[] args) {
        Student s1=new Student();
        Person s2=new Student();
        Object s3=new Student();

        s1.eat();
        s1.run();
        s2.run();  //子类重写了父类的方法,执行子类的方法

        //s2.eat();  //不能调用
        ((Student)s2).eat();
        //s3.run();  //不能调用
        ((Student)s3).eat();
     }
}

运行结果如下:

在这里插入图片描述


总结

  • 多态是方法的多态,属性没有多态

  • 父类和子类必须要有联系,否则类型转换异常(ClassCastException)

  • 多态存在条件:继承关系,方法需要重写,父类引用指向子类对象 Father f1 = new Son();

  • 以下方法不能被重写:

    1. static方法,属于类,它不属于实例
    2. final 常量
    3. private 方法

以上是关于多态 2021-06-12的主要内容,如果未能解决你的问题,请参考以下文章

2021-06-12

2021-06-12

java 代码片段

每个人单核苷酸多态性(SNP)形成的原因是啥?

java中封装,继承,多态,接口学习总结

多态性和动态铸造