Java向上转型、向下转型
向上转型:把一个子类类型安全地变为父类类型的赋值,被称为向上转型(upcasting)。
向上转型也就是多态的使用。
public class UpcastingTest { public static void main(String[] args) { Person person = new Person(); Student student =new Student(); Person p = new Student();//把一个子类类型安全地变为父类类型的赋值 } } class Person{ String name ="张三"; public void eat(){ System.out.println("人吃饭"); } } class Student extends Person{ int id =1001; public void study(){ System.out.println("学生学习"); } }
向下转型:和向上转型相反,如果把一个父类类型强制转型为子类类型,就是向下转型(downcasting)
public class UpcastingTest { public static void main(String[] args) { Person person = new Student();//把一个子类类型安全地变为父类类型的赋值 person.name = "李四"; //可以调用父类中声明的属性 person.eat(); //可以调用父类中声明的方法 //p.study();无法调用子类特有的属性和方法 //有了多态性以后,内存中实际上是加载了子类特有的属性和方法,但是由于声明的是父类类型, // 导致编译时,只能调用父类声明的方法和属性,子类特有的属性和方法无法调用 //如何才能调用子类中特有的属性和方法? //使用强制类型转换 Student student = (Student) person;//当前的p指向Student()的实例,所以强转为Student类型可以成功 student.study(); student.id = 1002;//现在就可以调用子类所特有的属性和方法了 //继续看下面的代码 Person man = new Person(); Student s1 = (Student) man;//执行会报错,报错原因是ClassCastException类型转换异常 //因为man指向的实例是Person()、将man在强制转换为(Student)就失败了,必须是同类型的才能转换成功! } } class Person{ String name ="张三"; public void eat(){ System.out.println("人吃饭"); } } class Student extends Person{ int id =1001; public void study(){ System.out.println("学生学习"); } }

浙公网安备 33010602011771号