Java-多态

转型

向上转型时, 得到的引用作为父类类型看待, 但是方法会执行子类重写后的方法。

通过向上转型得到了父类引用可以强制转换为相应子类, 即向下转型, 但不能强制转换为其他子类。

可以通过instanceof 关键字预先判断。

1
2
3
if(student instanceof Sportstudent) {
Sportstudent sp = (Sportstudent) student;
}

通过向上转型, 只用父类定义方法, 而直接使用子类进行操作。

抽象类

定义抽象类:

1
2
3
public abstract class Test {
abstract void doIt();
}

抽象方法必须定义在抽象类中。

抽象方法需要所在抽象类被继承后使用, 抽象类被继承后, 子类必须实现所有抽象方法(除非子类也是抽象类), 因此代码会有冗余的问题。

接口

抽象类的子类有些方法都需要, 但有些方法只有部分子类需要, 可以把这类方法放在接口中。

可以使用多个接口, 接口之间也可以继承

定义和使用接口:

1
2
3
4
5
6
7
8
9
10
11
public interface Test {
void doIt();
}

public interface Test2 extends Test{

}

public class a extends b implements Test, Test2 {

}

接口中的方法都是 public abstract, 变量都是 public static final

如果需要预先实现方法, 需要用default修饰。

可以通过向上转型用接口来定义对象。 这时接口可以当作子类进行操作。