1.向上转型
把子类Son对象赋值给父类对象Dad
Dad d = new Son();
2.向下转型
在向上转型的基础上,将Dad类对象重新强制转换为Son类然后赋值给Son类的对象,此时该对象具备Son类的所有属性和行为。
Dad d = new Son();
Son s = (Son)d;
代码实例:
class Dad{
public String name="Dad";
public String age="50";
public void Sleep(){
System.out.println(name+" Go to bed");
}
public void GoOut(){
System.out.println("Go out for work");
}
}
class Son extends Dad{
public String name="Son";
public int ID=1001;
public void Sleep(){
System.out.println(name+" Go to bed");
}
public void GoOut(){
System.out.println("Go out for study");
}
}
public class HelloWorld{
public static void main(String args[]){
Dad d=new Son(); //上转型变量
//Son s=new Dad(); 不可以将父类创建对象的引用赋值给子类声明的对象。
d.GoOut();
d.Sleep();
System.out.println(d.name);
//System.out.println(d.ID); 上转型变量不能调用子类新增的属性
Son s=(Son)d; //下转型变量
/*此时s具备了Son的所有属性*/
d.GoOut();
d.Sleep();
System.out.println(s.name);
System.out.println(s.ID);
}
}
运行结果
总结
1)上转型对象不能操作子类新增的属性和调用子类新增的方法
2)上转型对象可以访问子类继承或隐藏的属性、调用子类继承的方法或子类重写的实例方法。(等价于子类调用,重写静态方法除外)
3)对于子类重写了父类的静态方法,上转型变量只能调用父类的静态方法
4)可以将上转型变量再强制转换成子类对象,此时改子类对象又具备了子类的所有属性和方法。
5)不可以将父类创建对象的引用赋值给子类声明的对象。