多态

通常意味着 父类引用指向子类对象
当然具体地说,如果子类没有override方法,那谈多态也就没什么意义了。

对于父类和子类都有的非静态方法,在运行阶段会调用子类的版本(动态绑定)。但对于静态方法而言,编译阶段和运行阶段都会调用父类的版本。

abstract

abstract修饰方法就是没有方法体的方法。修饰类就是不能实例化的类。

抽象类可以没有抽象方法,也可以有。但有抽象方法的类必须是抽象类。
这也就意味着抽象类一般来说必须要有抽象方法,否则没必要做成抽象类了。

抽象类的意义在于提供一个模板。

abstract关键字和private final static 不能连用。
这里要解释一下static。比如给一个方法加static,就意味着把它升级为类级的。而如果把一个方法升级成类级,则通过类名就可以引用。这样的话就破坏了抽象类不能实例化的保护,可以直接通过类名来使用一个没有方法体的方法,不安全。

接口

接口比抽象类更抽象。表述的是一种行为或规范。
然而在Java9里,接口可以有私有方法。。这主要是因为Java8提供了默认方法。
默认方法允许方法带有一套默认的实现。而有了默认方法就涉及到代码复用的问题,为了不让外界使用,就需要private方法。