【java基础】上传型和下转型对象
程序员文章站
2023-12-25 14:53:09
...
对象可以转型,那么这2个对象一定存在父子关系,或者是实现了接口(也可以把接口当初父类看待)
1、上转型
例如,把猫转换成动物
动物 object =new 猫();
这个动物可以调用 猫继承父类过来的所有方法和成员变量(前提这些方法和变量是可见的,非private,或者无修饰且不同包情况),
如果猫重写了父类的某些方法,那么
动物调用父类的方法一定的子类重写的!!!!!!
2、下转型
动物 object1=new 动物();
猫 object2=(猫)object1;
这样写报错!!!!!!!!!!!!!!
java.lang.ClassCastException:
com.test.Person cannot be cast to com.test.Student
下转型对象前提,这个对象是你上转型时候的引用变量。
动物 object =new 猫();上转型
猫 object2=(猫)object ;
这个时候就和 猫 object3=new 猫()一样了,
object3能干什么,object2都可以。
demo:
父类----------------------
package com.test;
public class Person {
int age = 0;
private int age2 = 0;
private int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void print() {
System.out.println("class " + getClass());
}
}
子类------------------
package com.test;
public class Student extends Person {
String type = "Student";
public void print() {
System.out.println("class " + getClass());
}
public void getType() {
System.out.println("type Student");
}
}
测试:
package com.test;
public class Test1 {
public static void main(String[] args) {
Student s = new Student();
Person person = s;//上转型
person.print();//子类class class com.test.Student
//下转型
Student s3 =(Student)person;
s3.print();//子类class class com.test.Student
/*编译通过,运行报错
* Exception in thread "main" 子类class class com.test.Student
java.lang.ClassCastException: com.test.Person cannot be cast to com.test.Student
at com.test.Test1.main(Test1.java:11)
*
*/
Person person2 = new Person();
Student s2 = (Student) person2;
s2.getType();
}
}
好了,就这样