抽象类
定义:包含抽象方法的类,称为抽象类
格式:public abstract class 类名称{。。。}
抽象方法:没有方法体去实现的方法称为抽象方法
抽象方法格式:public abstracy 返回值 方法名称(); 其中public 与abstract二者不可省略
例:public abstract void method();//为抽象方法
抽象类中抽象方法的使用步骤
1.不能根据抽象类来直接创建(new)抽象类的对象
2.必须用一个子类来继承抽象父类
3.子类中必须覆盖重写父类中的所有抽象方法
覆盖重写(让父类中的抽象方法具体实现):去掉抽象方法的关键字abstractt 然后重写方法体
例: public void method(){
//方法体
}
4.建立子类对象对重写后的抽象方法进行调用
注意事项:
1.抽象类不能创建对象
2.抽象类中可以有构造方法,供子类创建对象时初始化父类成员使用(若无明写构造方法,系统会默认赠送一个super(),给子类使用无参构造法时,对父类的无参构造法进行调用)
3.抽象类中不一定包含抽象方法,但是有抽象方法的一定时抽象类(防止用户对抽象类进行创建对象)
4.抽象类的子类必须重写父类中所有的抽象方法
接口
定义接口格式:public interface 接口名称{接口内容}
接口中的抽象方法:也是利用两个关键字public与abstract但是这两个关键字可以省略
例:public abstract void method();//抽象方法
public void method();//抽象方法
abstract void method();//抽象方法
void method();//抽象方法
接口的使用步骤:
1.创建一个实现类对接口中的内容进行实现
实现类格式:public class acheieve implements 接口名称{。。}
2.接口的实现类必须覆盖重写接口中的所有抽象方法,若没有全部覆盖重写那么该实现类需要为抽象类
3.创建实现类的对象对重写后的方法进行调用,以达到使用接口的目的
接口中定义默认方法
格式:public default 返回值类型 方法名称(参数){方法体}
注意点:默认方法被实现类继承时也可以进行覆盖重写
接口中定义默认方法的意义:解决了接口的升级问题,可以在接口中新增方法,可以被实现类继承使用,而不需要重写方法
接口中定义静态方法
格式:public static 返回值类型 方法名称 (参数){方法体}
注意点:不可以通过实现类的对象对接口方法中的静态方法进行调用
原因:1个实现类可以对应多个接口,多个接口中若存在同名的静态方法会产生冲突
正确调用格式:接口名称.静态方法名();
接口中定义私有方法
1.普通私有方法:解决多个默认方法之间的代码重复问题
格式:private 返回值类型 方法名称(参数){方法体}
例 public interface MyinterfacePrivateA {
public default void method(){
System.out.println("接口默认方法执行1");
methodcommon()
}
public default void method2(){
System.out.println("接口默认方法执行2");
methodcommon()
}
//定义一个接口中普通的私有方法 解决默认方法中代码重复的问题
private void methodcommon(){
System.out.println("AAA");
System.out.println("BBB");
System.out.println("CCC");
}
}
例子中的
System.out.println(“AAA”);
System.out.println(“BBB”);
System.out.println(“CCC”);
可以直接替换为 methodcommon();
2.静态私有方法:解决多个静态方法之间重复代码的问题
格式:private static 返回值类型 方法名称(参数){方法体)
例:public interface MyinterfacePrivateB {
public static void method(){
System.out.println("静态方法执行1");
methodcommon();
}
public static void method2(){
System.out.println("静态方法执行2");
methodcommon();
}
//定义一个接口中普通的私有方法 解决默认方法中代码重复的问题
private static void methodcommon(){
System.out.println("AAA");
System.out.println("BBB");
System.out.println("CCC");
}
}
接口中定义成员变量
格式:public static final 数据类型 变量名称=数据值
经过public static final三个关键字的修饰,实际上定义完成后 该成员变量的值不可以再改变,效果上等同于常量
其中变量名称要求:全部都为大写,若多个字母用下划线进行分隔
注意事项:
1.接口中的成员变量定义可省略 public static final三个关键字,但实际上定义后仍然不可再次改变
2.接口中的成员变量定义后一定要手动赋值,否则会报错 不同于类中的成员变量不赋值会有默认值不会报错
3.接口成员变量名称要求:全部都为大写,若多个字母用下划线进行分隔
接口的注意事项
1.接口没有静态代码块或者构造方法
2.一个实现类可以对应多个接口
格式:public class 实现类名称 implements 接口1,接口2…{
//覆盖重写所有接口中的抽象方法
}
3.如果实现类的多个接口中,存在同名重复的抽象方法,只需要重写一次即可
4.如果实现类没有覆盖重写所有接口中的所有抽象方法,那么该实现类需要是抽象类
5.如果实现类所实现的多个接口中,存在多个重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写
6.一个类如果之间父类当中的方法和接口中的默认方法产生冲突,优先使用父类中的方法,继承优先于接口实现