多态

多态:


什么是多态?

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

一个对象的实际类型是确定的,但可以指向对象的引用类型有很多

多态存在的条件:

  • 有继承关系

  • 子类重写父类非方法

  • 父类引用指向子类对象

注意:多态是方法的多态,属性没有多态


Application:

package com.cheng.oop;

import com.cheng.oop.pol.Person;
import com.cheng.oop.pol.Student;

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

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

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

       //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
       s1.run();//自己独有的 执行自己的 输出Student.run
       s1.read();//自己和父类都有的,因为是自己是Student执行自己的 输出Student.read
       s1.say();//自己没有,调用从父类继承的 输出Person.say

       //s2
       s2.read();//方法重写了,执行Student的,输出Student.read
       s2.say();//执行Person的,输出Person.say
       //s2.run(); //若父类子类一样,因为Student引用类型指向父类,所以执行Person的


       /*
       多态注意事项:
       1.多态是方法的多态,属性没有多态
       2.前提是父类和子类有联系。
       3.类型转换异常:ClassCastException
       4.存在条件:继承关系、方法重写、子类对象的引用类型为父类

       复习:什么方法不能重写?
       1.static方法 属于类 不属于实例
       2.final 常量
       3.private 通过private修饰的方法是私有的
        */
  }
}


Person:

package com.cheng.oop.pol;

public class Person {
   public void read(){
       System.out.println("Person.read");
  }
   public void say(){
       System.out.println("Person.say");
  }
//   public void run(){
//       System.out.println("Person.run");
//   }

}

Student:

package com.cheng.oop.pol;

public class Student extends Person {
   public void run(){
       System.out.println("Student.run");
  }

   @Override//重写
   public void read() {
       System.out.println("Student.read");
  }
}

posted @ 2021-06-03 20:43  Dudo1  阅读(70)  评论(0)    收藏  举报