main方法
package com.easy.oop.Day03;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Student();
//new Person( );
//可以指向的引用类型就不确定了:父类的引用指向子类
// Student能调用的方法都是自己的或者继承父类的!
Student s1 = new Student();
//Person父类型,可以指向子类,但是不能调用子类独有的方法
Person s2 = new Student();
s1.say();
s2.say();
//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
//子类重写了父类的方法,执行子类的方法
/*
1.父类引用指向子类的对象
2.把子类转换为父类,向上转型;
3.把父类转换为子类,向下转型;强制转换
4.方便方法的调用,减少重复的代码!
*/
((Student) s2).run();
//object > String
//object > person > Teacher
//object > Person > student
// Object object=new Student();
// System.out.println(object instanceof Person);//true
// System.out.println(object instanceof Student);//true
// System.out.println(object instanceof Object);//true
// System.out.println(object instanceof Teacher);//false
// System.out.println(object instanceof String);//false
// System.out.println("=======================");
// Person person=new Student();
// System.out.println(person instanceof Person);//true
// System.out.println(person instanceof Student);//true
// System.out.println(person instanceof Object);//true
// System.out.println(person instanceof Teacher);//false
// //System.out.println(object instanceof String);//编译报错
// System.out.println("=======================");
// Student student=new Student();
// System.out.println(student instanceof Person);//true
// System.out.println(student instanceof Student);//true
// System.out.println(student instanceof Object);//true
// //System.out.println(student instanceof Teacher);//编译报错
// //System.out.println(student instanceof String);//编译报错
}
/*多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系类型转换异常! CLassCastException !
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son( );*/
}
父类
package com.easy.oop.Day03;
public class Person {
public void say(){
System.out.println("人在说话");
}
}
子类
package com.easy.oop.Day03;
public class Student extends Person{
public void say(){
System.out.println("学生在说话");
}
public void run(){
System.out.println("学生在走路");
}
}
输出结果