面向对象三个最重要特征:封装、继承、多态
向上转型:将子类对象赋值给父类引用
向下转型:将父类对象赋值给子类引用(前提先向上)
Person person=new Person();
Student student=(Student)person;
直接向下转型,可编译过,但运行异常
向上转型:将子类对象赋值给父类引用
向下转型:将父类对象赋值给子类引用(前提先向上)
//------Person.java
class Person {
String name;
int age;
void introduce(){
System.out.print("name="+name+",age="+age);
}
}
//------Student.java
class Student extends Person{
String addr;
void introduce(){ //override:具有父子关系,函数名、参数列表、返回值均同
super.introduce();
System.out.print(",addr="+addr);
}
}
//------Test.java向上转型
public class Test {
public static void main(String[] args) {
Student stu=new Student();
Person per=stu;
per.name="lyl";
per.age=26;
// per.addr="ncut"; error
// 引用能够调用哪些成员(变量和函数),取决于该引用的类型
per.introduce();
// 引用实际调用的方法,取决于该引用所指向的对象
}
}
//结果:name=lyl,age=26,addr=null
//------Test.java向下转型
public class Test {
public static void main(String[] args) {
Person per=new Student(); //向上转型
Student stu=(Student)per; //必须加(Student)
stu.name="lyl";
stu.age=26;
stu.addr="ncut";
stu.introduce();
}
}
//结果:name=lyl,age=26,addr=ncut
------/
Person person=new Person();
Student student=(Student)person;
直接向下转型,可编译过,但运行异常