1 向上转型(不需要强制转换): 由抽象度低的类向抽象度高的类转型(子类—父类)
好处:可以操作和使用子类继承或重写的方法
失处:失去对子类新增成员变量和新增成员方法的操作和使用
2 向下转型(需要强制转换): 由抽象度高的类向抽象度低高的类转型(父类—子类)
sub s=(sub)new Father();//运行时出错,编译通过(父类不可以强制转换成子类,子类包含父类所没有的变量和方法)
异常:Exception in thread "main" java.lang.ClassCastException:
转换对象是在运行时进行转换的
编译运行都正常通过
因为此时f是一个子类实体对象,有具体的引用地址,强制转换成子类变量,引用地址传递给s
3 可以使用 引用变量 instanceof 类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
父类引用指向子类对象。子类和父类中定义同名的变量时,仅仅是隐藏了,变量没有多态性;而对于覆盖的方法,Java表现出多态性,会调用更具体的子类里面的方法,无论从哪里调用,无论使用什么引用类型调用。(引用)