java接口和抽象类
系列文章目录
第一章 万事万物皆对象
第二章 java构造器
第三章 java访问权限
第四章 java初始化
第五章 java继承
第六章 java重载与重写
第七章 java接口和抽象类
第八章 java数组
第九章 java内部类
第十章 java时间操作
第十一章 final关键字
第十二章 java字符串
第十三章 java异常
第十四章 java泛型
第十五章 java IO操作
第十六章 java NIO操作
第十七章 java zip压缩
第十八章 java反射
第十九章 java反射之Type接口
第二十章 java8流式操作
第二十一章 java8函数式编程
原文链接 https://zhhll.icu/2020/java基础/面向对象/7.java基础之接口和抽象类/
接口和抽象类
抽象类
抽象方法的声明没有方法体。
abstract void func();
包含抽象方法的类叫做抽象类。
public abstract class Basic{
abstract void func();
protected abstract void func1();
public abstract void func2();
}
抽象方法默认是public的,不可以设置为private
抽象类总结
- 抽象类不能被实例化,应该由实现了其抽象方法的子类来进行实例化
- 抽象方法必须由子类来重写
- 只要包含了一个抽象方法的类,该类就是抽象类
- 抽象类中可以包含具体的方法,当然也可以不包含抽象方法
- 子类的抽象方法不能与父类的抽象方法同名
- abstract不能与final同时修饰一个类(因为final不可被继承,而abstract必须由子类来继承实现)
- abstract不能与private、static、final或native同时修饰一个方法
接口
在java8之前的接口只允许有抽象方法,是一个完全抽象的类,没有提供任何实现
接口中的属性被隐式指明为public static final
public interface Inter{
int m();
}
java8之后允许接口包含默认方法和静态方法
默认方法允许在不破坏已使用接口的代码的情况下,在接口中新增方法,必须用default修饰符来修饰方法
public interface Inter{
int m();
default void newMethod(){
System.out.println("新增方法");
}
}
如果两个接口中都提供了相同名称且参数相同的默认方法,在同时实现这两个接口的时候需要让程序员来解决这个二义性,即需要覆盖该方法来解决默认方法的冲突
静态方法可以将工具功能放在接口,从而操作接口
public interface Operations{
void execute();
static void runOps(Operations... ops){
for(Operations op : ops){
op.execute();
}
}
static void test(){
System.out.println("接口静态方法");
}
static void main(String[] args) {
test();
}
}
接口总结
- 在java8之前只能有抽象方法,java8之后可以有默认方法和静态方法
- 接口不能有构造器
- 接口的方法默认是public的
- 接口中的属性全部为public static final修饰
- java8之前接口没有main方法,java8之后可以有main方法
抽象类和接口比较
相同点
- 接口和抽象类都不能实例化
- 接口和抽象类都不能独立运行
- 接口和抽象类中都可以有属性
不同点
- 可以实现多个接口;但只能继承一个抽象类
- 接口只能包含静态属性,不支持对象状态,成员变量默认是public static final的;抽象类可以包含属性,可以是public的也可以是private的,非抽象方法可能引用这些属性
- 接口不需要在子类实现默认方法,默认方法可以引用其他接口的方法;抽象类必须在子类中实现抽象方法
- 接口没有构造器;抽象类可以有构造器
- 接口方法隐式为public;抽象方法可以是public的也可以为protected
- 抽象类是对事物的抽象,接口是对行为的抽象
本文来自博客园,作者:拾光师,转载请注明原文链接:https://www.cnblogs.com/life-time/p/17864416.html 个人博客-> https://zhhll.icu