面向对象12:什么是多态?

package com.oop.demo06;

public class Student extends Person{

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

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


}
/*
多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系   类型转换异常ClassCastException!(出现这个代表对象类型转换出现问题)
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象! Father f1 = new Son();
   1.static 方法,属于类,它不属于实例
   2.final 常量;(放在常量池中无法修改)
   3.private方法;(私有的也无法重写)
 */
package com.oop;

import com.oop.demo05.A;
import com.oop.demo05.B;
import com.oop.demo06.Person;
import com.oop.demo06.Student;

/*
* 封装的意义
* 1.提高程序的安全性
* 2.隐藏代码的实现细节
* 3.统一接口
* 4.系统的可维护性增加了
* */
public class Application {
    public static void main(String[] args) {

        //一个对象的实际类型是确定的,但是可以指向的引用类型就不确定了
        //new Student();
        //new Person();

        //都是学生,但是同样表现出来有多种状态,这就叫多态
        //对象指向的引用类型是不确定的,
        //Student能调用的方法都是自己的或是继承父类的!
        Student s1 = new Student();
        //Person父类型,可以指向子类,但是不能调用子类独有的方法。
        Person s2 = new Student();//父类的引用指向子类的类型
        Object s3 = new Student();

        //★对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
        //如果只有person类中有run方法则S2执行person类中的run方法,如果student重写了run方法,则s1、s2都执行重写后的方法,输出son
        s2.run();//子类重写了父类的方法,执行子类的方法
        s1.run();

        //s2.eat();会报错,因为s2的类型是person类,person类中还没有eat方法,如果有的话,那子类没有重写方法就调用父类的,重写了方法就调用子类的
        //((Student) s2).eat();//这里是将s2类型强制转换成Student类型了
    }
}

 

posted @ 2024-04-02 13:24  三口一头居  阅读(12)  评论(0)    收藏  举报