首页 > 其他分享 >12 多态讲解

12 多态讲解

时间:2023-02-09 19:11:28浏览次数:26  
标签:s2 12 子类 多态 Person Student 讲解 父类

多态讲解

image
image

代码

package com.zhan.base05Oop.base05Oop03;

public class Test12 {
    // 多态
    /*
    多态的注意事项:
    1. 多态是方法的多态,属性没有多态
    2. 父类和子类要有联系,不然类型转换异常:ClassCastException!
    3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象 Person s2=new Student();
     */
    public static void main(String[] args) {
        // 一个对象的实际类型是确定的
        Student s1=new Student();   // 学生对象s1 就是学生
        // 一个对象的可以指向的引用类型是不确定的,父类的引用指向子类
        Person s2=new Student();  // 学生对象s2 不仅是学生,同时也是一个人
        Object s3=new Student();  // 学生对象s2 不仅是学生,同时也是一个事物

        s2.printName(); // Student  子类重写(非静态非私有非常量)了父类的方法,执行子类的;没有重写的话直接继承父类的,那么将会执行父类的方法
        // 根据实际情况不同进行不同的执行,这就是多态
        // 当子类没有重写父类的方法时,s2.printName();执行父类的方法输出Person
        // 对象能执行哪些方法主要看对象左边的类型(是 Person 还是 Student 或者 Object),与右边关系不大
        // s2.eat(); 会报错  // 父类的不能直接调用子类的方法,会报错,但可以通过转换类型操作(就像8大基本类型数据的转换一样)
        ((Student) s2).eat(); // 高转底 ,强制转换  高低指的是容量,子类是父类的extends(拓展,自然是高容量类型)

        // Student类, 子类型,能调用的都是自己的或者继承父类的
        // 儿子可以是自己的性格(方法),也可以继承父亲的性格(方法),但是父亲只能是父亲的性格
        // Person类, 父类型,只能调用自己的,不能调用子类的

    }
}

class Person{
    public void printName(){
        System.out.println("Person");
    }


}

class Student extends Person{  // 学生也是人,可以继承人的特性


    @Override
    public void printName() {
        System.out.println("Student");
    }

    public void eat(){      // 这是父类没有的方法
        System.out.println("eat");
    }
}

标签:s2,12,子类,多态,Person,Student,讲解,父类
From: https://www.cnblogs.com/zhanjianhai/p/17106744.html

相关文章