转型
上溯造型,即向上转型(Upcasting)是指子类转换为父类,这是自动转换;转换的前提是具有继承或实现关系。向上转型损失了子类新扩展的属性和方法,仅可以使用从父类中继承的属性和方法。
下溯造型,即向下转型(Downcasting)称之为强制转换,是将父类对象显式的转换成子类类型。曾经向上转换过的对象,才能再向下转换。对象不允许不经过上溯造型而直接下溯造型。
1、上溯造型,创建子类对象,赋值给父类类型的对象
2、下溯造型必须是曾经上溯过的对象才能下溯转回子类类型
public class Test_38_向上转型 {
public static void main(String[] args) {
// 上溯造型,创建子类对象,赋值给父类类型的对象
Person_38 p = new Student_38();
// p.study();//不能调用子类自己的方法
p.sayHello();// 可以调用父类声明过的方法:这里发生了方法覆盖
// 2、下溯造型必须是曾经上溯过的对象才能下溯转回子类类型
Person_38 p2 = new Person_38();
// Student_38 s2=(Student_38)p2;//执行时出错
Student_38 s = (Student_38) p;// 上溯后的p
s.study();
//3、instanceof 运算符
if( s instanceof Person_38) {//s子类是继承父类的,也算父类类型
System.out.println("s 是Person_38类型的");
}
if( s instanceof Student_38) {
System.out.println("s 是Student_38类型的");
}
if( p instanceof Person_38) {
System.out.println("s 是Person_38类型的");
}
if( p instanceof Student_38) {
System.out.println("s 是Student_38类型的");
}
}
}
class Person_38 {
public void sayHello() {
System.out.println("hello");
}
}
class Student_38 extends Person_38 {
public void sayHello() {// 覆盖了父类的sayHello方法
System.out.println("hello, I'm stu");
}
public void study() {
System.out.println("I can study");
}
}