抽象类与接口
接口
接口用来描述类应该做什么,而不是指定它们具体应该如何做 主要用于定义规范
一个类可以实现多个接口
接口中所有方法自动是public abstract 不必显示声明
接口不会有实例字段,字段默认添加 public static final 修饰 即常量
接口不能有初始化块、构造器
子类实现接口方法需要显示声明方法的访问属性为public,类的默认访问属性是包可见的,子类如不是抽象类,需要实现接口中全部抽象方法
接口可以继承接口 多继承,不能继承类,级别比类高
jdk8以前,接口不会有实现方法
jdk8以后可以有default修饰的普通实现方法,通过对象调用,重写不需要添加@overwrite,可以有静态的实现方法,通过接口名调用
父接口的子类实例不能向无关的子接口强转 视为两个不同分支
抽象类
主要用于代码重用
定义:
修饰符 abstract 类名{ //类体 修饰符 abstract 返回值类型 方法名(参数列表) }
public void test(){xxx};
抽象类必须被继承使用,不能被直接实例化
抽象类可以有成员变量、构造方法、成员方法,可以用构造方法来初始化属性
允许包含抽象成员
有构造方法却不能被实例化?
在抽象类中可以有构造方法,只是不能直接new 抽象类的实例对象,但实例化子类的时候,就会初始化父类,不管父类是不是抽象类都会调用父类的构造方法,初始化一个类会先初始化父类。java中构造器是用来初始化的,不是用来实例化对象的。抽象类中的构造器是用来给成员变量赋值的,供子类使用。
异同
不同点:
目的不同:接口定义一组类的执行规范,抽象类为了代码重用
定义关键字不同:接口interface,抽象类abstract
实现或继承的关键字不同:接口用implements来实现,抽象类用extends来继承
访问控制符不同:接口中只能public,抽象类中都可以
作者: deity-night
出处: https://www.cnblogs.com/deity-night/
关于作者:码农
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(***@163.com)咨询.