多态

多态

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

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

  • 多态存在的条件

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

  • instanceof 类型转换(引用类型)

  • package com.oop.demo06;
    
    public class Person {
        public void run(){
            System.out.println("run");
        }
    }
    
    /*
    多态的注意事项:
    1.多态是方法的多态,属性没有多态
    2.父类和子类,有联系。
    (两个没有联系--->类型转换异常!==> ClassCastException!)
    3.继承的存在条件:有继承关系,方法需要重写,父类引用指向子类对象!
        Father f1 = new Son();
    
     */
    
    //-------------------------------------------------------
    package com.oop.demo06;
    
    public class Student extends Person {
        @Override
        public void run() {
            System.out.println("son");
        }
    
        public void eat(){
            System.out.println("eat");
        }
    }
    //-------------------------------------------------------
    package com.oop;
    
    import com.oop.demo06.Person;
    import com.oop.demo06.Student;
    
    public class Application {
        public static void main(String[] args) {
            // 一个对象的实际类型是确定的,但可以指向的引用类型是不确定的
            //Student能调用的方法都是自己的或者继承父类的!
            Student s1 = new Student();
            //Person(父类型),可以指向子类,但是不能调用子类独有的方法
            Person s2 = new Student(); //父类的引用指向子类
            Object s3 = new Student();
    
            //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
            s2.run();//若子类重写了父类的方法,则执行的是子类的方法
            s1.run();
            s1.eat();
            //s2.eat(); //Person(父类型),可以指向子类,但是不能调用子类独有的方法
            ((Student)s2).eat();//类型强制转换(把s2(Person类)强制转换为Student类)可以实现
        }
    }
    
    
posted @ 2022-11-20 16:30  TangoVer  阅读(21)  评论(0编辑  收藏  举报