抽象类和接口的区别
概述:抽象类和接口都是对于对象进行封装的,本身是不包含具体对象,也不能够创建对象,但是两者之间存在区别。
抽象类的特点:
1.抽象类使用 abstract 关键字修饰
2.有一个抽象方法的类一定是抽象类
3.一个抽象类可以没有抽象方法
4.没有抽象方法的抽象类有意义, 防止外界创建对象
防止外界创建对象的方式:
a.构造方法私有
b.抽象类
c.接口
d.内部类
5.抽象类不能够实例化
6.如果我想要"实例化"抽象类,怎么做 --> 利用多态
7.抽象类也可以创建匿名内部类对象
匿名内部类的格式:
new 类名() {
重写方法
}
8.抽象类的子类特点:
a.如果一个子类想要继承抽象类,就必须实现抽象类中的所有的抽象方法
b.如果一个子类不想要实现抽象类中的抽象方法,子类必须升级为抽象类
9.抽象类和普通类的区别:
抽象类中是否有 常量 成员变量 成员方法 构造方法 静态方法?
有的话又有什么意义呢?
成员变量 成员方法 构造方法 给子类用
常量 静态方法 直接类名方法
构造方法: 帮助子类初始化父类继承下去的成员
10.private final native static protected public 哪些可以修饰抽象方法,哪些不可以,说出为什么?
private final native和 抽象方法冲突
static 和 抽象方法无意义
protected public 和 抽象方法可以共存
11.抽象类的本质就是一个彻头彻尾的服务类,所有的成员都给子类使用,自己不能实例化,燃烧自己,服务子类
抽象类可以是一个模板,里面可以只包含成员变量,而可以没有成员方法
接口的特点汇总:
1.接口使用 interface关键字修饰
2.接口是常量和抽象方法的集合,在JDK1.8之后还可以有 静态方法和默认方法
3.接口中的常量默认省略 public static final,所以接口中就不存在成员变量
接口中的方法默认省略 public abstract
4.接口不能够实例化
5.如果想要"实例化"一个接口,必须使用多态【接口多态】
6.接口的子类特点:
a.如果一个类想要实现一个接口,那么就必须实现该接口中所有的抽象方法
b.如果一个类不想要实现接口,那么该类升级为接口
7.接口是一种规范
8.接口是可以扩展功能
9.接口是灵活的
总结
两者其实都是属于抽象类,只是接口是比抽象类还要抽象类,它是一个完全规范,更加灵活,可以多继承。
普通类、接口和抽象类的区别
- 父类是普通类的是模板。
- 父类是抽象类的是部分模板,部分规范。
- 父类是接口的时候,就是完全规范。
类和类、类和接口、接口和接口的区别:
类和类: 单继承 不能多继承,不能多实现
类和接口: 多实现, 不能够多继承
解释:
-
java 如果出现多继承、父类中都有相同的属性和name 值 子类如果使用父类的属性和name 值 无法确定是哪一个父类的是 属性和name值
-
父类中如果相同的方法,并且子类并没有覆盖该方法。子类调用父类的时候 无法判断是那个父类的方法。
接口和接口: 多继承, 不能多实现
解释:
-
接口(jdk 1.8 以上版本)里面的方法能够实现,即使接口之间具有相同的方法仍然是可以的,接口里面的成员变量都是 static,final的,有自己静态域,只能自己使用。
-
当方法名相同的时候,接口只能实现其中一个方法,而不能实现同名的方法
什么时候使用接口? 什么时候使用继承?
当抽取多个共性代码或者设计复杂类的时候使用继承,其他一律接口