前言
抽象类是从多个类中抽象出来的模板,如果将这种抽象进行的更彻底,则可以提炼出一种更加特殊的“抽象类”——接口(Interface)。接口是 Java 中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成。
接口
一、接口的使用
1.1、接口使用interface来定义
1.2、在java中接口和类是两个并列的结构
二、如何定义接口
2.1、在jdk7及以前只能定义全局常量和抽象方法
- 全局常量:public static final
- 抽象方法:public abstract
2.2、jdk8,除了可以定义全局常量和抽象方法,还可以定义静态方法和默认方法
三、接口中不能定义构造器,意味着接口不可以实例化
四、java开发中,接口通过让类去实现(implements)的方式来使用
4.1 如果实现类覆盖了接口中所有的抽象方法,那么这个类可以实例化
4.2 如果实现类没有覆盖了接口中所有的抽象方法,那么此实现类仍是一个抽象类
- java类可以实现多个接口------>>弥补了Java类的单继承的局限性
- 格式:class A extends B implements C,D,E
- 接口与接口之间可以多继承
五、定义接口
- public 表示接口的修饰符,当没有修饰符时,则使用默认的修饰符,此时该接口的访问权限仅局限于所属的包;
- interface_name 表示接口的名称。接口名应与类名采用相同的命名规则,即如果仅从语法角度来看,接口名只要是合法的标识符即可。如果要遵守 Java 可读性规范,则接口名应由多个有意义的单词连缀而成,每个单词首字母大写,单词与单词之间无需任何分隔符。
- extends 表示接口的继承关系;
- interface1_name 表示要继承的接口名称;
- constant_name 表示变量名称,一般是 static 和 final 型的;
- returnType 表示方法的返回值类型;
- parameter_list 表示参数列表,在接口中的方法是没有方法体的。
注意:一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
实现接口
1.通过一个类的继承实现
定义一个水果类实现标准。
package aaa; //包
interface Fruits{
//接口标准
public abstract String eat(); //接口方法
public abstract String think(); //接口方法
}
class Student implements Fruits{
//子接口实现
@Override //注解:准确覆写
public String eat() {
//覆写方法
return "苹果";
}
@Override
public String think() {
return "香蕉";
}
}
public class ZS{
public static void main(String args[]) {
Fruitsa=new Student(); //实例化对象
System.out.println(a.eat()+a.think()); //输出
}
}
输出:苹果香蕉
2.在接口内部通过内部类实现
package aaa;
interface Fruits{
public abstract String eat();
public abstract String think();
class Student implements Fruits{
//类内部接口实现
public String eat() {
return "苹果";
}
public String think() {
return "香蕉";
}
}
}
public class ZS{
public static void main(String args[]) {
Fruits.Student a=new Fruits.Student(); //实例化
System.out.println(a.eat()+a.think());
}
}
此时注意实例化方式:外部类.内部类 内部类对象=new 外部类.内部类();
如果要定义方法输出,则方法定义为static类型。