Java的类可以分为三类:
类:使用class定义,没有抽象方法。
抽象类:使用abstract class定义,可以有也可以没有抽象方法。
接口:使用inerface定义,只能有抽象方法。
在这三个类型之间存在如下关系:
类可以extends:类、抽象类(必须实现所有抽象方法),但只能extends一个,可以implements多个接口(必须实现所有接口方法)。
抽象类可以extends:类,抽象类(可全部、部分、或者完全不实现父类抽象方法),可以implements多个接口(可全部、部分、或者完全不实现接口方法)。
接口只能extends一个接口。
继承以后子类可以得到什么:
子类拥有父类非private的属性和方法。
子类可以添加自己的方法和属性,即对父类进行扩展。
子类可以重新定义父类的方法,即多态里面的覆盖,后面会详述。
关于构造函数:
构造函数不能被继承,子类可以通过super()显示调用父类的构造函数。
创建子类时,编译器会自动调用父类的无参构造函数。
如果父类没有定义无参构造函数,子类必须在构造函数的第一行代码使用super()显示调用。
类默认拥有无参构造函数,如果定义了其他有参构造函数,则无参函数失效,所以父类没有定义无参构造函数,不是指父类没有写无参构造函数。看下面的例子,父类为Human,子类为Programmer。