java多态性---upcasting and downcasting

来源:互联网 发布:希尔伯特矩阵方程组 编辑:程序博客网 时间:2024/05/09 02:12

1、upcasting和downcasting

class Person{void fun1(){System.out.println("Person's fun1");}void fun2(){System.out.println("Person's fun2");}}class Student extends Person{Student(){}void fun1(){System.out.println("Student's fun1");}void fun2(){System.out.println("Student's fun2");}}public class JavaTest{public static voidmain(String[] agrs){Person p=new Student();p.fun1();p.fun2();}}





2、强制类型转换需要注意的问题


class Person{void fun1(){System.out.println("Person's fun1");}void fun2(){System.out.println("Person's fun2");}}class Student extends Person{void fun1(){System.out.println("Student's fun1");}void fun2(){System.out.println("Student's fun2");}}public class JavaTest{public static void main(String[] agrs){Person p=new Person();Student stu=(Student)p;stu.fun1();stu.fun2();}}

3、casting可见性问题

upcasting之后仅仅对父类的属性和方法可见

class Person{void fun1(){System.out.println("Person's fun1");}void fun2(){System.out.println("Person's fun2");}}class Student extends Person{void fun1(){System.out.println("Student's fun1");}void fun2(){System.out.println("Student's fun2");}void fun3(){System.out.println("Student's fun3");}}public class JavaTest{public static void main(String[] agrs){Person p=new Student();p.fun3();Student stu=(Student)p;stu.fun3();}}

改成如下code即可

class Person{void fun1(){System.out.println("Person's fun1");}void fun2(){System.out.println("Person's fun2");}}class Student extends Person{void fun1(){System.out.println("Student's fun1");}void fun2(){System.out.println("Student's fun2");}void fun3(){System.out.println("Student's fun3");}}public class JavaTest{public static void main(String[] agrs){Person p=new Student();//upcasting,此时p对fun3不可见//p.fun3();Student stu=(Student)p;//downcasting,此时stu对fun3可见stu.fun3();}}


1 0