一. 类的继承
1.定义:继承是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性,行为.
注意事项:①子类可以直接访问父类中的非私有的属性和行为
②子类继承父类的方法但是不会继承父类的构造方法.
2. 定义格式:
class 子类 extend 父类 {
}
3.继承后的特点:
①.如果子类中没有出现和父类重名的成员变量,访问没有影响,但是如果出现了和父类重名的成员变量,则想要访问父类的成员变量需要使用super.父类成员变量名来进行访问.
②.如果子类中没有出现和父类重名的成员方法,没有影响,如果出现了和父类重名的成员方法,发生方法重写.声明不变,重新实现.子类可以根据自己的需要定义自己特定的行为.
注意:1.子类方法重写时,必须保证权限大于父类权限.
2.子类覆盖父类方法时,返回值类型,函数名,参数列表都要一模一样.
4.构造方法:
①.构造方法的名字与类名一致,子类无法继承父类的构造方法
②.构造方法的作用是初始化成员变量.在子类的初始化过程中,必须先执行父类的初始化动作.子类的构造方法中默认有一个super(),父类成员被变量初始化后才可以给子类使用
③.父类空间优先于子类对象产生,每次创建子类对象是,先初始化父类空间,再创建子类对象
5.继承的特点
①JAVA只支持单继承,不支持多继承
②JAVA支持多层继承
③顶层父类是Object类,所有的类默认继承Object类
二.抽象类
1.定义:没有方法体的方法是抽象方法,有抽象方法的类是抽象类
2.使用:继承抽象类的子类必须重写父类的所有抽象方法,否则也必须声明为抽象类.抽象类不能创建对象
3.注意事项:
①.抽象类不能创建对象,如果创建了,编译会无法通过.只能创建其非抽象类的子类的对象(就算创建了抽象类的对象,但是调用抽象的方法,人家方法连方法体都没有,调用一点用都没有,没有意义)
②抽象类可以有构造方法,但是不是用来创建这个抽象类的对象用的,而是给子类创建对象的时候初始化父类成员用的.
③抽象类不一定有抽象方法,没有抽象方法的也可以声明是抽象类(这种东西的目的不是让人用来创建对象使用的,而是用于某些特殊的类结构设计,就算没有抽象方法,声明是抽象类,要创建对象是不会给编译过的)
三.接口
1.概述:接口是一种引用类型,是方法的集合.接口的内部主要就是封装了方法,包含抽象方法,默认方法和静态方法私有方法
2.定义格式: public interface 接口名称 { }
①.抽象方法:使用abstract关键字修饰,可以省略abstract,没有方法体,供子类实现使用
②.默认方法:使用default修饰,不可以省略,给子类调用或者重写用的
③.静态方法:用static修饰,供接口直接调用
④.私有方法:private修饰,给接口的默认方法或者静态方法调用
3.基本实现:class 类名 implements 接口名 { }
注意:①.必须重写接口中的所有抽象方法
②.继承了接口的默认方法可以直接调用或者重写
默认方法的使用可以继承也可以重写,但是只能通过实现类的对象来调用
4.接口的多实现:一个类可以实现多个接口,.一个类能继承一个父类,同时实现多个接口
格式: class 类名 ( extends 父类名 )implements 接口名1,接口名2,接口名3........{ }
5.注意事项:
①接口中,有多个抽象方法时,实现类必须重写所有抽象方法.如果抽象方法有重命名的,只需要重写一次.
②有多个默认方法时,实现类都可以继承使用.如果默认方法有重名的,必须重写一次
③.接口中存在同命名的静态方法不会冲突,因为只能通过各自接口名访问静态方法.
6.优先级
当一个类既继承父类又实现多个接口时,如果父类的成员方法有和接口默认方法重名的,子类就近选择执行父类的成员方法
7.接口的多继承
注意:子接口继承父接口时,如果父接口的默认方法有重名的,那么自接口需要重写一次
子接口重写默认方法时,dafault关键字可以保留
子类重写默认方法时,default关键字不可以保留
8.其他成员特点:
①.接口中无法定义成员变量,但是可以定义常量 默认使用public static fianl修饰
②.接口没有静态代码块,没有构造方法