import oop.Demo009.Preson;
import oop.Demo009.Student;
import oop.Demo009.Teacher;
public class Application {
public static void main(String[] args) {
//等级
//Object > String
//Object > Preson > Teather
//Object > Preson > Student
Object object = new Student();
//System.out.println(x instanceof y);//能不能编译通过 得看X和y是否有关系!
System.out.println(object instanceof Student);//true
System.out.println(object instanceof Preson);//true
System.out.println(object instanceof Object);//true
System.out.println(object instanceof Teacher);//true
System.out.println(object instanceof String);//true
System.out.println("==========================");
Preson preson = new Student();
System.out.println(preson instanceof Student);//true
System.out.println(preson instanceof Preson);//true
System.out.println(preson instanceof Object);//true
System.out.println(preson instanceof Teacher);//false
//System.out.println(preson instanceof String);//编译报错!
System.out.println("==========================");
Student student = new Student();
System.out.println(student instanceof Student);//true
System.out.println(student instanceof Preson);//true
System.out.println(student instanceof Object);//true
//System.out.println(student instanceof Teather);//编译报错!
//System.out.println(student instanceof String);//编译报错!
}
}
package oop.Demo009;
public class Teacher extends Preson{
}
package oop.Demo009;
public class Student extends Preson{
}
-
1.能否编译通过,看x 与 y ,若存在父子或子父关系则可以编译
-
2.若x 与 y 没有父子关系,如 teacher 与 student,就不可以编译
-
3.编译过后结果是 T/F 看引用指向对象,x 指向的对象如果是后面 y 的子类,即是T
强制转换
public static void main(String[] args) {
//类型之间的转换:父(高) 子(低)
//高-------------->低(不需要强制转换)
Preson obj=new Student();
//obj 将这个对象转换为Student类型,我们就可以使用Student类型的方法了!
(Student)obj).go();
}
子类转换父类
//自子类转换为父类,可能丢失自己本来的一些方法
Student student = new Student();
student.go();
Preson preson=student;
Preson.go//报错!只能进行强制转换调用go方法
多态总结:
-
1.存在的条件:父类引用指向子类的对象
-
2.把子类转换为父类,向上转型;
-
3.把父类转换为子类,向下转型(强制转换);
-
4.方便方法的调用,减少重复的代码