抽象类
abstract class Animal {
abstract public void eat();
}
- 在 eat 方法前面加上 abstract 关键字 表示这是一个抽象方法,抽象方法没有方法体(没有{},不能执行具体代码)。
- 对于包含抽象方法的类,必须在类的前面加 abstract 关键字表示这是一个抽象类。
注意事项
- 抽象类不能 直接 实例化
- 抽象方法不能用private修饰
- 抽象类中包含抽象方法、字段和非抽象方法,其中非抽象方法和普通方法一样,可在子类中重写或者直接调用
接口
接口是抽象类的进一步简化,接口中只包含字段的静态常量和抽象方法
interface IAnimal {
public static final String name = "圆圆"; //静态常量
public abstract void eat(); //抽象方法
}
//简化
interface IAnimal {
String name = "I am a boy.";
void eat();
}
注意事项
- 在被调用时同样可以创建一个接口的引用,对应到一个子类的实例
- 接口不能单独被实例化
extends “扩展” 和 implements “实现”
- 扩展是当前已经有一定的功能了,进一步扩充功能
- 实现是当前啥都没有,需要从头构造
接口的命名方式
-
我们创建接口的时候 , 接口的命名一般以大写字母 I 开头 .
-
接口的命名一般使用 " 形容词 " 词性的单词 .
-
阿里编码规范中约定 , 接口中的方法和属性不要加任何修饰符号 , 保持代码的简洁性
如何在Java中实现 “多继承”
Java中只支持单继承,我们可以通过多个接口实现类似“多继承”的效果
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
//接口
interface IFlying {
void fly();
}
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
//
class Fish extends Animal implements ISwimming {
public Fish(String name) {
super(name);
}
@Override
public void swim() {
System.out.println(this.name + "正在用尾巴游泳");
}
}
class Frog extends Animal implements IRunning, ISwimming {
public Frog(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name + "正在往前跳");
}
@Override
public void swim() {
System.out.println(this.name + "正在蹬腿游泳");
}
}
这样就实现类似“多继承”的效果 一个类继承一个父类, 同时实现多种接口.