什么是多态?
●多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。
多态的具体代码体现
People p1= new Student ();
p1.run();
People p2= new Teacher ();
p2.run();
多态的前提
●有继承/实现关系;存在父类引用子类对象;存在方法重写。
多态的一个注意事项
●多态是对象、行为的多态, Java 中的属性(成员变量)不谈多态。
自动类型转换:父类变量名= new 子类();
强制类型转换:子类变量名=(子类)父类变量
强制类型转的一个注意事项
●存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。
●运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException )的错误出来。
People p = new Teacher ();
Student s =( Student ) p ;// java . Lang . ClassCastException
强转前, Java 建议:
.使用 instanceof 关键字,判断当前对象的真实类型,再进行强转。
p instanceof Student
1、使用多态有什么好处?存在什么问题?
可以解耦合,扩展性更强;使用父类类型的变量作为方法的形参时,可以接收一切子类对象。·多态下不能直接调用子类的独有方法。
2、类型转换有几种形式?能解决什么问题?
自动类型转换、强制类型转换。
可以把对象转换成其真正的类型,从而解决了多态下不能调用子类独有方法的问题。
3、强制类型转换需要注意什么?
存在继承/实现时,就可以进行强制类型转换,编译阶段不会报错。
但是,运行时,如果发现对象的真实类型与强转后的类型不同会报错( ClassCastException )。
4、强制类型转换前? Java 建议我们做什么事情?
使用 instanceof 判断当前对象的真实类型:对象 instanceof 类型。
package com.xinbao.d1_polymorghism;
public class People {
String name = "父类";
public void run(){
System.out.println("人会跑");
}
}
package com.xinbao.d1_polymorghism;
public class Teacher extends People{
String name = "老师";
@Override
public void run() {
System.out.println("老师跑的比较慢~~");
}
public void teach(){
System.out.println("老师教java");
}
}
package com.xinbao.d1_polymorghism;
public class Student extends People{
String name = "学生";
@Override
public void run() {
System.out.println("学生跑的飞快~~");
}
public void study(){
System.out.println("学生学Java");
}
}
package com.xinbao.d1_polymorghism;
public class Test2 {
public static void main(String[] args) {
//目标:掌握多态的好处
People p1 = new Student();//解耦合,便于维护
p1.run();
Student s = new Student();
go(s);
Teacher t = new Teacher();
go(t);
}
public static void go(People p){
System.out.println("开始----------------");
p.run();
//p.teach();//错误
//p.study();//错误
if (p instanceof Student) {
Student s = (Student) p;//强制类型转换,父类强转成子类
s.study();
} else if (p instanceof Teacher){
Teacher t = (Teacher) p;
t.teach();
}
System.out.println("结束----------------");
}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=37159:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\code\out\production\oop-app4 com.xinbao.d1_polymorghism.Test2
学生跑的飞快~~
开始----------------
学生跑的飞快~~
学生学Java
结束----------------
开始----------------
老师跑的比较慢~~
老师教java
结束----------------