一、继承 extends
继承的特点:Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类
1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。
用super来显示的调用父类的方法
调用普通方法:super.方法名(参数);
二、抽象类 abstract
抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法
抽象方法:abstract
void
fun() 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。
规则:
1、抽象方法和抽象类必须使用abstract修饰符来定义,抽象方法不能有方法体
2、抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例
3、抽象类可以包含成员变量,方法(普通方法和抽象方法)、构造器、初始化块、内部类(接口、枚举)5种成分,抽象类的构造器不能用于创建实例,主要用于被其子类调用
4、含抽象方法的类只能被定义为抽象类
三、接口
接口可以看成一类特殊的抽象类,抽象类里可以有变量,可以有抽象方法,可以有普通方法,而接口里只有抽象方法和常量
在接口里面声明的抽象方法可以不写abstract关键字来标识,因为接口里面所有的方法都是抽象的,因此这个“abstract”关键字默认都是省略掉的
定义一个接口:
1 public interface interfacename 2 { 3 4 }
用implements来实现
1 public class className implements interfacename//接口可以多实现 2 { 3 4 }
接口的继承:
接口的继承和类的继承不一样,接口完全支持多继承,即一个接口可以有多个直接父接口;和类的继承相似,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量。
1 interface class extends interfacename, interfaceA 2 { 3 4 }
作为接口来说,一个类可以从接口继承(或者叫实现接口),这也是多继承,接口里面的成员变量不专属于某个对象,都是静态的成员变量,是属于整个类的,因此一个类去实现多个接口也是无所谓的,不会存在对象之间互相冲突的问题。实现多个接口,也就实现了多重继承,而且又避免了多重继承容易出现问题的地方,这就是用接口实现多重继承的好处。
接口和抽象类的差别:
相同:
1、接口和抽象类都不能被实例化,他们位于继承树的顶端,用于被其他类实现和继承
2、接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通zi.lei都必须实现这些抽象方法。
不同点:
1、接口里值能包括抽象方法,静态方法和默认方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。
2、接口里只能定义静态常量,不能定义普通成员变量;抽象类里则既可以定义普通成员变量,也可以定义静态常量。
3、接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让妻子类调用这些构造器来完成属于抽象 类的初始化操作
4、一个类最多只能有一个父类,包括抽象类;但一个了可以实现多个接口,通过实现多个接口可以弥补Java单继承的不足