2020.11.24 接口

super和this的含义
super
1.super代表父类
2.可以访问父类中的成员属性和方法: super.成员变量名 和 super.成员方法名()
3.访问父类构造方法:super(参试列表),子类构造方法内部必须有父类构造方法,如果父类里面有无参构造,子类构造方法中不写就默认存在,如果父类中没有无参构造,那么子类中就必须写。

继承过程中父类构造方法特点
1.子类构造方法中默认的super()调用,所以一定是先调用父类构造方法,再执行子类构造
2.父类构造方法可以重载,子类也可以大铁锅super(参数列表),调用父类的重载构造方法
3.super(参数列表)一定是在第一行,所以一个子类构造方法里面不可能同时出现两个super(参数列表)
总结:子类必须调用父类构造方法,一般情况是默认送super(),如果我们单独写了super(参数列表),就不送无参构造调用,并且super必须放在第一行

this关键字
1.表示访问当前类的成员变量和成员方法,this.成员变量 和 this.成员方法();
2.可以访问本类中的构造方法:this.(参数列表)
3.构造方法不能自己调用自己,成员方法可以自己的调用自己
4.this必须在第一行,并且唯一,构造方法之间的调用不能形成闭合,否则就会报错,成员方法可以
5.普通成员方法不能使用this调用构造方法

super和this调用注意事项
两者不能同时使用,因为都在第一行

继承补充
1.继承是单继承,一个子类只能有一个直接父类
2.继承可以多级继承,子类有父类,父类上面还可以有爷爷类
3.一个父类可以有好多子类
4.子类和父类是相对概念

抽象类
定义:父类当中的方法在每一个子类里面都是不一样的效果,那么就应该使用抽象方法,父类里面是抽象方法的声明,没有实现体,也没有具体的实现,包含抽象方法的就是抽象类

什么是抽象方法
没有方法体的方法

什么是抽象类
包含抽象发的类

抽象方法关键字:abstract
抽象方法关键字是abstract,抽象方法质保函方法名,没有方法体
格式:修饰符 abstract 返回值数据类型 方法名(参数列表);
注意:抽象方法没有方法体 【 {} 】

抽象类
当一个类包含了抽象方法,那么我们就说这个类是抽象类
格式:修饰符 abstract class 类名{}

抽象使用
1.一个类继承抽象类,就必须继承抽象类的所有的抽象方法,否则该子类必须定义为抽象类
2.抽象方法只能在抽象类或者接口中

如何使用抽象方法
1.不能直接实例化抽象类,编译不通过
2.用子类继承抽象类,必须重写所有抽象方法
3.在子类中重写之后的抽象方法,去除abstract并加上方法体
4.测试类里面,创建子类对象并且调用重写之后的抽象方法
5.方法重写,是子类对父类抽象方法的完全实现

抽象类使用注意事项
1.抽象类不能实例化,只能实例化非抽象子类对象
2.抽象类有构造方法,不过主要适用于给子类创建对象使用
3.抽象类不一定包含抽象方法,包含抽象发的类一定是抽象类
4.抽象类必须重写抽象类所有的抽象方法,否则编译无法通过,除非子类也是抽象类

接口
接口:多个类的公共规范,以放抽象方法为主
接口声明:不用class,用interface
格式:修饰符 interface 接口名{}
接口和类一样都是引用数据类型,都是 .java源文件,并且通过javac便以为 .class字节码文件

接口内部包含哪些
1.常量
2.抽象方法(主)
3.默认方法(default修饰)(JDK1.8)
4.静态方法(static修饰)(JDK1.8)
5.私有方法(private修饰)(JDK1.9)主要供给默认方法和私有方法使用

接口使用步骤
1.接口不能直接使用,必须有一个实现类实现接口【implements】
格式:修饰符 class 类名 implements 接口名{}
2.接口实现类必须重写接口中所有抽象方法,并且接口没有构造方法,抽象类有构造方法
3.通过实现类对象,调用重写之后的方法

注意事项
如果一个实现类没有重写接口中所有的抽象方法,要么这个实现类是抽象鳄梨,要么就会报错
引用数据类型:类,接口,数组

接口中抽象方法
1.可以省略public abstract 直接写 返回值数据类型 方法名();
2.实现类重写抽象方法,删除abstract,并且加上{}
3.如果实现类实现多个接口,抽象方法名重名,没有影响,因为抽象方法只是声明,具体实现在实现类

默认方法
用default修饰,public default void 方法名(){}供子类调用或重写,但只能选择其中之一。
1.实现类中重写默认方法
2.重写默认方法不可以省略default
3.如果没有重写默认方法就认为是继承了
4.如果实现类实现多个接口,那么默认方法重名必须重写

静态方法
1.格式:public static void 方法名(){}
2.静态方法是属于类的,只能通过接口名调用,所以实现类不能重写或者继承
3.调用格式:接口名.方法名();
4.实现类实现多个接口,并且静态方法方法名重名,每一项因为他是通过接口名调用

私有方法(JDK1.9)
1.格式:
2.私有方法:只有默认方法可以使用
3.私有静态方法:默认方法和静态方法都可以使用
4.如果一个接口中有多个默认方法,并且方法中有重复内容,那么就可以抽取出来,封装到私有方法中,供默认方法调用,所以私有方法是对默认方法和静态方法的辅助

接口基本实现
1.关键字:implements
2.格式:修饰符 class 类名 implements 接口名1,接口名2{
//重写接口中所有的抽象方法
//重写接口当中默认方法【可选】
}

重写标记
1.@Override

继承和接口之间的优先级问题
如果父类当中成员方法和接口中的默认方法重名,不能重写,子类优先执行弗雷当总的成员方法,不再执行接口当中的·默认方法

接口多继承
一个接口能继承一个或多个接口,使用extends关键字,子接口继承父接口方法,如果默认方法重名,必须重写一次
格式: 修饰符 interface 接口名 extends 接口名1,接口名2{}
注意:子接口重写默认方法default必须保留

其他成员特点
1.接口中没有成员变量只有常量 public static final 常量=数值;
2.接口没有构造方法,不能实例化
3.接口中没有静态代码块,因为借口中没有初始化器

接口有点
1.制定规则和格式
2.高内聚,低耦合,方便维护强制要求每个方法单独实现
3.扩展原有功能

接口和抽象类的异同
相同
1.都包含抽象发,子类必须重写抽象方法
2.不能直接实例化
3.都位于继承顶端,只能被继承或者实现
不同
1.抽象类可以包含普通成员方法,接口不能包含普通成员方法
2.一个类只能集成一个类,一个类可以实现很多接口
3.类与类之间单继承,接口与接口之间可以多继承
4.抽象类可以定义普通成员变量和常量,接口只能定义常量

原文地址:https://www.cnblogs.com/tushao/p/14032531.html