Person
package day08;
public class Person {
public void test(){
System.out.println("这是Person的test方法");
}
}
Stuent
package day08;
public class Student extends Person {
public void getSchool(){
System.out.println("这是student的getSchool方法");
}
}
Test
package day08;
import javax.print.DocFlavor;
public class Test {
public static void main(String[] args) {
int i=10;
long l=i;//小的可以转换为大的
long l=102;
int i= (int) l;//大的转换为小的需要强制转换
Student s =new Student();
Person p=s;//从子类到父类可以自动转换
Person p=new Person();
Student s=(Student) p;//从父类到子类必须通过强制转换类型实现
// Test t=new Test();
// Person p1 =t;//无继承关系的引用类型间的转换是非法的
// Object是所有类的父类,所以我们可以写成以下的样子
String s ="hello";
Object obj =s;
System.out.println(obj);
Object obj ="hello";
String s=(String)obj;
Test t=new Test();
t.method(new Person());
t.method(new Student())
}
public void method(Person e){//在方法传递参数时,子类作为父类的一个特殊类,是可以
//传进去的,所以这里method方法可以传person也可以传student。所以问题是,我们到底传
//的是哪个参数,进而我们要做一个if判断
//
if (e instanceof Student){
Student s=(Student)e;
s.getSchool();
}else {
e.test();
}
}
}
运行截图