对象类型转换
- 前言
- 一、向上转型
- 二、向下转型
- 1.instanceof 运算符
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、向上转型Person.java文件
在这里插入代码片
package first;
public class Person {
String name;
public void talk() {
//把父类中的覆盖情况去掉,则子类中的方法不再可见;
}
public void listen() {
System.out.println("a person is listening");
}
}
Student.java文件
package first;
public class Student extends Person{
String no; //定义学号;
public void talk() {
System.out.println("student is talking");
}
public void learn() {
System.out.println("student is learning");
}
}
Teacher.java文件
package first;
public class Teacher extends Person {
String workno;//定义工号;
public void talk() {
System.out.println("teacher is talking");
}
public void teach() {
System.out.println("teacher is teaching");
}
}
向上转型是指父类引用子类对象,就是子类对象能转换成父类对象,例如上面的代码
假设父类person类对象p 和子类student 对象 s
Person p; p=new Student(); //父类Person 对象 p引用子类student 新创建的对象 Student s=new Student(); p=s; 也可以直接写成: Person p=new Student(); //父类Person 对象 p引用子类student 新创建的对象
当子类对象 s 赋给父类对象p时,是隐式转换。不用进行强制类型转换。父类引用子类对象后只能引用父类中的成员变量和方法,而不能访问子类自己定义的成员变量和成员方法。
二、向下转型向下转型是指子类引用父类对象,就是将父类对象能转换成子类对象;
必须满足两个条件:
- 必须执行强制类型转换
- 必须确保父类对象是子类的一个实例,否则抛出异常
Person p=new Student(); //父类引用子类的对象 Student s=(Student)p; //父类对象p赋予子类对象s 当前p是子类student的引用;
向下转型特点:
- 向下转型对象可以操作父类及子类成员变量和成员方法
- 向下转型对象访问重写父类的方法时,操作的是子类的方法
- 向下转型必须进行强制类型转换
- 向下转型必须保证父类引用的是该子类的对象,如果引用的是子类的其他子类对象,会抛出类型不匹配异常。
父类对象能转换成子类对象的条件是父类对象原本就是子类的实例。为了确保向下转型时,父类对象引用的是子类的对象,引入instanceof 运算,该运算符用来判断该引用变量是否属于该类或该类的子类,格式为:
引用变量名 instanceof 类名
package first;
public class UseOfInstanceof {
public static void main(String[] args) {
Person p1=new Teacher();
Person p2=new Student();
pleasetalk(p1);
pleasetalk(p2);
p1.listen();
p2.listen();
if(p1 instanceof Teacher) {
System.out.println("she is a teacher!");
((Teacher)p1).teach();
//如果能转换 则让老师演示教学
}
if(p2 instanceof Student) {
System.out.println("he is a Student!");
((Student)p2).learn();
}
}
static void pleasetalk(Person p) {
}
}
结果:
a person is listening
a person is listening
she is a teacher!
teacher is teaching
he is a Student!
student is learning



