类
类是一个模板,描述一类对象的行为和状态
抽象类
为其子类提供一个公共的类型,封装子类中具有相同属性的内容,定义抽象方法,子类虽然有不同的实现 但是定义是一致的
内部类的作用
- 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
- 在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
- 创建内部类对象的时刻并不依赖于外围类对象的创建。
- 内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
- 内部类提供了更好的封装,除了该外围类,其他类都不能访问
接口
首先,接口并不是类,它们属于不同的概念, 接口是Java中一种抽象类型,通常包含一系列抽象方法的集合。
接口的意义:规范、扩展、回调
抽象类与接口区别
- 默认的方法实现
抽象类可以有默认的方法实现,类依然可以是抽象的。
接口可以使用default关键字实现默认方法而不要求其子类进行实现 - 实现
子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。
子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 - 构造器
抽象类可以有构造器
接口不能有构造器 - 与正常Java类的区别
除了你不能实例化抽象类之外,它和普通Java类没有任何区别;
接口是完全不同的类型 - 访问修饰符
抽象方法可以有public、protected和default这些修饰符;
接口方法默认修饰符是public。你不可以使用其它修饰符。 - main方法
抽象方法可以有main方法并且我们可以运行它;
接口没有main方法,因此我们不能运行它。 - 多继承
抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。 - 速度
类比接口速度要快
接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 - 添加新方法
如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。
如果你往接口中添加方法,那么你必须改变实现该接口的类。