向上转型和向下转型其实是java中的一种多态,继承和实现都有自己的转型方式,他们大致相同,略微在向下转型有一些区别。我们一般称向上转型为瘦身,假如A是B的父类,此时 A a = new b();叫做向上转型,会丢失自己和父类不同的方法,而重写父类和自己都有的方法。使用a调用方法时,发现子类有的方法就调用子类,子类没有的调用父类。假如A是B的子类,此时 A a = new b();叫做向下转型,但是在这里会有异常发生,因为父类根本不知道到底谁继承了他,这个时候需要强转,而继承还有一个问题就是,必须要先向上转型才能向下转型。接口实现可以直接向下转型。
class Useful {
public void f() {
System.out.println("Useful:f()");
}
public void g() {
System.out.println("Useful:g()");
}
public void w() {
System.out.println("Useful:w()");
}
}
class MoreUseful extends Useful {
public void f() {
System.out.println("MoreUseful:f()");
}
public void g() {
System.out.println("MoreUseful:g()");
}
public void u() {
System.out.println("MoreUseful:u()");
}
public void v() {
Sy