抽象类和接口

抽象类

  • 子类继承父类后往往会添加新的属性和方法,因此沿着继承链越向下继承的子类和方法越具体
    越上层的祖先类越抽象
  • java可以不定义方法体的方法,其方法体由子类根据具体情况实现,这样的方法被称为是抽象方法
  • 抽象方法和抽象类的声明必须加上abstract 关键词
  • 抽象方法的意义:加给子类一个约束

一个类如果满足下面的任意一个条件,则该类包含抽象方法且是抽象类

  • 类显式地包含了一个抽象方法的声明
  • 类的父类中声明的抽象方法未在类c中实现
  • 类所实现的接口中有的方法没有类c中实现
  • 只要是类中有一个未实现的方法(自己定义的或者是继承的),就是抽象类
  • 一个不包含任何抽象方法的类,也可以定义为抽象类

只有实例方法可以声明为抽象类,抽象类不能被实例化,即不能用new关键词创建对象,
但是抽象类的父类可以是具体类,自己加入了抽象方法

接口

接口是公共静态常量和公共抽象实例方法的集合,接口是公共抽象实例方法的集合,接口是能力,规范,协议的反映

接口和类的区别:

  • 不能定义构造函数
  • 接口之间可以多继承,类可以同时实例化多个接口
  • 和抽象类意义,不能new一个接口

接口中所有数据字段隐含为 public static final
接口中所有的方法隐含为public abstract

所以一些对类型的声明其实是可以省略,但是对于数据的初始化是一定要做的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package A;

public interface A2 {
void eat();
void out();
int z = 1;
}
package A;
```java
public class A1 implements A2{
@Override
public void eat() {
System.out.println("okk");
}

@Override
public void out() {
System.out.println("nooo");
System.out.println(z);
}
}