接口
简述
含义:
接口,规则,协议
接口,即定义规则——规定某些方法的修饰符、返回值类型、方法名、参数列表、方法异常申明、方法的实现功能
好处:
因为有了规则,那么方法的具体实现和调用可以分离,减少耦合性
关键字:interface、implements
格式:
接口格式::interface 接口名{……}
实现类格式:calss 实现类名 implements 接口名{……}
作用:用于定义方法,所以只包含抽象方法
【特点】:不可实例化,只有抽象方法(jdk8之前)、常量
【注意】:
1)成员变量
①没有成员变量,只有常量
②解释:接口不可创建对象,不能在堆内存中申请空间
2)构造方法
①没有构造方法,因为没有要初始化的成员变量
②实现类不访问接口的构造方法,而是访问父类的构造方法
3)成员方法
①全是抽象方法
②写 类型 方法名();即可,会自定补充public abstract
4)实现类
如果重写了接口的所有抽象方法,那么它就是一个普通类(只是和接口产生了联系),可以实例化
如果没有重写所有抽象方法,那么它就是一个抽象类(抽象方法只能放在抽象类中),不可实例化
接口、实现类举例:
interface Inter {
public abstract void min();
public abstract void max();
}
class Impl implements Inter {
@Override
public void min() {
System.out.println("这是min方法的实现1");
}
@Override
public void max() {
System.out.println("这是max方法的实现1");
}
}
abstract class Impl2 implements Inter {
@Override
public void min() {
System.out.println("这是min方法的实现2");
}
}
类、接口之间的相互关系
1)类与类
继承:extends
原则:单继承,多层继承
2)类与接口
实现:implements
原则:单、多实现(一个类可以实现多个接口)
格式:class 类名 implements 接口1,接口2,……{……}
注意:接口1与接口2之间不能矛盾
继承父类实现接口:class 子类名 extends 父类名 implements 接口1,接口2……{……}
3)接口与接口
继承:extends
原则:单、多继承,多层继承
格式:interface 接口名 extends 接口1,接口2,……{……}
原则:接口1与接口2之间不能冲突
定义接口与类的原则
原则:把拓展的、特有的定义为接口。
例如:人都会吃饭、睡觉,所以将其定义为类;学习是学生特有的,将学习定义为接口。学生又是人类,所以学生继承人类后 实现学习接口(为什么不将学生定义为人类的子类,因为它还要实现学生的学习功能)
匿名内部类(常用)
格式:
new 父类或者接口名(){
对父类或者接口中的方法的重写;
};
【注意】:
1)必须存在继承或者是接口的实现的关系
2)只能调用父类或者接口中定义的方法,不能调用自己特有的方法
3)不能向下转型,类名都没有
4)可以将匿名对象赋值给父类或者接口的引用
初版:
public class demo_匿名内部类 {
public static void main(String[] args) {
//普通局部内部类
class Wo implements Person{
@Override
public void eat() {
System.out.println("我吃饭了");
}
}
new Wo().eat();
//匿名内部类
new Person() {
@Override
public void eat() {
System.out.println("吃饭了");
}
}.eat();
}
}
interface Person{
public abstract void eat();
}
精简版:lambda表达式
public class demo_精简匿名内部类 {
public static void main(String[] args) {
//精简版。lambda表达式
Person per = () -> System.out.println("lambda表达式,吃饭了");
per.eat();
//方法引用
Person1 per2 = System.out :: println;
per2.eat();//只是换行,因为没有打印任何内容
}
}
interface Person{
public abstract void eat();
}
PS:
1)【】表示重要,删除线表示已解决
2)学习记录使用,如果存在错误还望指正