November+23th+2016+by+Alex+Zhou

今天我们学习了继承、多态、抽象、接口

1. 继承 类的继承的关键字是extends. 使用extends就能使子类继承父类. 子类与父类之间的关系永远都是子类is-a 父类，千万不能弄反. 在继承关系中，所有public的变量以及方法都能被继承到子类中，而且子类可以直接调用. 但是，如果父类的变量或方法的访问请求是private,那子类就不能直接调用这些方法，只能使用accessor. 子类能有自己异于父类的方法，而这些方法是父类不能调用的，因为子类is-a 父类，而非反过来. 如果子类有一个函数，其函数签名和父类的某一函数相同，但内容与之不同，那这种情况叫做override. 调用子类的这个函数时，会运行子类函数里面的内容.

2 多态 如果又一个类是这样的： public class Students public UnderGrad extends Students public Gradstud extends Students 那么 UnderGrad 继承Students Gradstud 继承 Students

Students 里有一个public函数a UnderGrad 里有一个函数a，内容跟Students的不一样，但签名一样 Gradstud里有一个函数a，内容跟Students 和 UnderGrad的不一样，但签名一样.

Students s = new Students; Students u = new UnderGrad; Students g = new Gradstud;

s.a, u.a, g.a 这三个声明究竟调用的是哪个函数？这就是多态，s.a调用的是Students的，u.a调用的是UnderGrad的，g.a调用的是Gradstud的. 这个过程是在运行代码时进行的.

UnderGrad里若有一个函数b，Students 里没有b，那写下u.b时会报错，因为Students里没有b，因此需要强制转换类型变成((UnderGrad) u) .b.

3 抽象 抽象类里面可以有完整的变量，完整的函数，也可以有抽象的、只有一个函数头的函数. 抽象类永远不能被实例化. 一个普通类可以继承抽象类，但是普通类里面必须把继承下来的抽象方法通过override变成普通方法. 普通类里不能有抽象方法. 抽象类也能继承抽象类.

4 接口 只有函数头，关键字implements.