JAVA 面向对象06-多态

多态

(1)多态是方法的多态
(2)父类和子类要有联系,类型转换异常:Class Cast Exception!
(3)多态存在的条件:继承条件,方法需要重写,父类引用指向子类的对象!!

一个对象new Student的实际类型是确定的Student,但可以指向的引用类型是不确定的。

引用类型 对象名 = 对象的值(new 类名)

Student s1 = new Student();
        
Person s2 = new Student();//父类的引用指向子类对象,s2为Person类

Object s3 = new Student();//父类的引用指向子类

  • 当子类的引用指向自己的类时,该对象存在的方法:子类Student的方法,以及继承的父类方法;
  • 当父类的引用指向子类,该对象存在的方法:父类Person的方法,以及被子类重写的子类的方法,但不能调用子类独有的方法。可以执行哪些方法,看左边定义的引用类型
    1. 当父类的方法中没有被重写就调用父类的方法;
    2. 当父类的方法被子类重写就调用子类的方法。

例:
父类:Person

public class Person {
    
    

    public void run(){
    
    
        System.out.println("run");
    }

    public void earn(){
    
    
        System.out.println("earn money!");
    }

}

子类:Student

public class Student extends Person{
    
    
    //子类重写父类的run()方法
    @Override
    public void run() {
    
    
        System.out.println("son");
    }

    public void eat(){
    
    
        System.out.println("eat");
    }
}

main方法:

public static void main(String[] args) {
    
    
        //一个对象的实际类型是确定的
        //new Student();
        //new Person();

        //可以指向的引用类型就不确定了
        //引用类型 对象名 = 对象的值
        //子类Student的方法,以及继承的方法
        Student s1 = new Student();
        //父类Person的方法,以及被子类重写的子类的方法,但不能调用子类独有的方法
        Person s2 = new Student();//父类的引用指向子类对象,s2为Person类

        Object s3 = new Student();//父类的引用指向子类

        //对象可以执行哪些方法,看左边定义的引用类型
        //s2,父类的方法没有被重写就调用父类的方法
        //s2,父类的方法被子类重写就调用子类的方法
        s1.run();//打印输出son
        s2.run();//打印输出son,Student子类重写Person父类的方法,执行子类的方法
        s1.eat();//打印输出eat
        //s2.eat();//报错,s2的左边引用类型为Person无eat()方法
        ((Student) s2).eat();//把s2强制装换成Student类型,然后调用其独有的方法
        s2.earn();//Person类特有的方法

    }

运行结果:

son
son
eat
eat
earn money!

猜你喜欢

转载自blog.csdn.net/qq_44826240/article/details/123922388