多态
什么是多态?
即同一方法可以根据发送对象的不同而采取多种不同的行为方式。
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多
多态存在的条件:
-
有继承关系
-
子类重写父类非方法
-
父类引用指向子类对象
注意:多态是方法的多态,属性没有多态
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");
}

浙公网安备 33010602011771号