类访问
类访问控制符:
友好的和public
友好的:被本包引用、继承
Public: 可被所有包引用、继承(其他包加import)
类中访问控制符:
(从不同范围该使用哪种访问控制符来对此有一个清晰的认识)
同类:任何 均可以;
同包不同类:
引用:友好的 及以上
继承:友好的 及以上
不同包:
引用:public 及以上
继承:protected 及以上
抽象类
抽象方法定义:
只有声明部分,无具体的方法:
Public abstract void move();
必须用abstract修饰
抽象方法意义:
由于子类重写父类方法,父类方法无作用,仅提供方法名,忽略不写即为抽象方法
抽象类定义:
类中有任何一个抽象方法即为抽象类;
类中没有抽象方法类由abstract修饰也为抽象类;
只有为抽象类,类名必须用abstract修饰;
抽象类使用:
只能被继承,不能直接创建对象;
子类若不对所有抽象方法实例化,也为抽象类,需用abstract修饰[extends 接口列表]{}
接口
接口定义:
语法:public(只能用此和默认的) interface 接口名[extends 接口列表]{}
接口只能包含常量(默认public static final)、抽象方法及内部类
抽象方法必须为public修饰
接口继承:
只能继承父接口,不能继承抽象类和普通类
能同时继承多个接口(不同于类继承一个父类)
接口实现:
访问控制符 修饰符 class 类名 implements 接口1[接口2..]{}
类中实现接口时,方法名字,数据类型等都需一致
接口回调
类似上转型,声明父接口,传递子类,调用时使用子类变量或方法
接口无构造方法(而抽象类中有),不能创建自己对象
接口使用
接口实现类可以直接使用接口中的常量(变量名)
若多个父接口常量重复,需用(父接口.变量名)使用
Java8新增
一个或多个由default修饰方法,由实现类创建对象来调用
一个或多个由static修饰方法,由实现类创建对象来调用或接口或实现类直接调用??
(实验中static修饰方法,只能由创建的接口直接调用别的都不行,这点仍需试验)
函数式接口
接口内只定义一个抽象方法,称为函数式接口
@FunctionalInterface注解验证是否为函数式接口,返回true或false
函数式接口可定义多个java.lang.Object中的public方法( booblean equals(Object obj); )