接口
接口介绍
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。
接口的定义和特点
定义格式:
//接口用关键字interface来定义
public interface 接口名 {}
接口的特点:
接口不能实例化
接口和类之间是实现关系,通过implements关键字表示
public class 类名 implements 接口名 {}
接口的子类(实现类)
要么重写接口中的所有抽象方法
要么是抽象类
接口和类的实现关系,可以单实现,也可以多实现。
public class 类名 implements 接口名1 , 接口名2 {}
代码示例:
//定义第一个接口
public interface Inter {
public abstract void study();
}
//定义第二个接口
public interface InterA {
public abstract void method1();
public abstract void method2();
public abstract void study();
}
//定义实现类实现两个接口
public class InterImpl implements Inter, InterA {
//实现接口要重写里面所有的抽象方法。
@Override
public void study() {
System.out.println("我是实现类中的study方法");
}
@Override
public void method1() {
}
@Override
public void method2() {
}
}
public class Demo1InterFace {
/*
接口的[定义]格式:
public interface 接口名 {}
类[实现]接口格式:
public class 类名 implements 接口名 {}
*/
public static void main(String[] args) {
InterImpl ii = new InterImpl();
ii.study();
}
}
接口中的成员特点
成员变量
只能是公有、静态、常变量,即必须有public、static和final联合属性;
默认修饰符:public static final
构造方法
没有构造方法(不会被实例化)
成员方法
只能是公有、抽象方法,即,必须(自动)拥有public和abstract联合属性
默认修饰符:public abstract
关于接口中的方法,JDK8 和 JDK9 中有一些新特性
代码示例:
public interface Inter {
//只能是常量,默认用public static final修饰
public static final int NUM = 10;
//接口中没有构造方法
//public Inter(){}
//只能是抽象方法,默认用public abstract修饰
public abstract void eat();
}
class InterImpl extends Object implements Inter {
public InterImpl(){
super();
}
public void show(){
// NUM = 20;
System.out.println(NUM);
}
//实现一个接口,要重写里面所有的抽象方法
@Override
public void eat() {
}
}
类和接口之间的各种关系
类和类的关系
继承关系,只能单继承,但是可以多层继承。
类和接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时实现多个接口。
接口和接口的关系
继承关系,可以单继承,也可以多继承。
代码示例1:
public class DemoInterface {
/*
类和接口:
实现关系, 可以单实现, 也可以多实现.
并且可以在继承一个类的同时, 实现多个接口.
*/
public static void main(String[] args) {
Zi z = new Zi();
z.method();
z.method1();
z.method2();
}
}
class Fu {
public void method() {
System.out.println("Fu类中的method方法");
}
}
interface InterA {
void method1();
}
interface InterB {
void method2();
}
interface InterC{
void method();
}
//实现一个接口,要重写里面所有的抽象方法。
class Zi extends Fu implements InterA, InterB, InterC {
@Override
public void method1() {
System.out.println("Zi类重写后的method1方法");
}
@Override
public void method2() {
System.out.println("Zi类重写后的method2方法");
}
}
代码示例2:
interface InterA {
void method1();
}
interface InterB {
void method2();
}
//接口和接口之间是多继承关系
interface InterC extends InterA, InterB {
void method3();
}
//实现一个接口,要重写里面所有的抽象方法。
//而且当前接口所有父接口的抽象方法也要重写。
class InterCImpl implements InterC {
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
}
接口的特点及作用
1、海纳百川——类型的统一与保护
2、政令统一——规范方法
凡是实现了这个接口的非抽象类,就必须实现这个接口所规定的所有抽象方法。
规范方法的“规范”,主要体现一下几点:
1)指定的所有方法都必须实现,且一个都不能少;
2)规范了方法的名称;
3)规范了方法的参数个数与参数类型;
4)规范了方法的返回值类型。
3、广而告之——方法的公开
4、面向未来——分离原则