1.使用接口的好处:通用性,和隔离性
2.定义接口的格式:
public Interface 接口名{
}
3.接口的组成部分
a)抽象方法(核心内容)
b)常量
c)静态方法(java8)
d)默认方法(java8)
e)私有方法 (java9)
4.定义一个抽象方法
public abstract 返回值类型 方法名称(参数类型 参数名称)
a)修饰符 public abstract 也可以省略不写
b)抽象方法不可以写方法大括号
5.接口要想使用一定要有一个实现类。如何实现
public class 实现类名称 implements 接口名称(){
// 一定要覆盖重写所有的抽象方法
}
6.什么是重写覆盖抽象方法
a).将接口当中的抽象方法抄写过来
b).去掉abstract方法
c).写上大括号方法体
7.使用用接口和实现类
接口名称 引用名 =new 实现类名称();
引用名.抽象方法名
注意:左边是接口类型只能调用接口当中定义好的内容,不能调用右侧实现类中特有的内容(接口隔离)
当调用接口当中的抽象方法时,真正进行运行的是右侧new的时候的具体的方法
总结记住一句话,调用的时候看左边运行的时候看右边
面向接口编程:如果使用的的功能,接口已经可以满足,那么就可以不在乎具体的类是谁,只在乎接口就好了
8.从java8开始没有接口的实现类,也可以直接使用接口(Lambda表达式)
package com.xgg.itface.test;
/*
* 接口可以放哪些内容
* 1.抽象方法
* 2.常量
* 3.默认方法 java8
* 4.静态方法 java8
* 5.私有方法 java9
*
* 如何定义一个抽象方法
* public abstract 返回值类型 方法名称(参数类型 参数名称)
*
* 注意
* 接口中的抽象方法,修饰如果写 必须是 public abstract
* 接口中的抽象方法,修饰符可以省略不写,默认就是 public abstract
* 抽象方法只有方法头,不能有方法体大括号
*
*
* 如何使用接口和实现类
* 接口名称 引用名 =new 实现类名称();
* 引用名.抽象方法名
*
*/
public interface DemoInterFace {
//定义一个常量
public static final int num=100;
public abstract void eat() ;
String play(String things);
}
package com.xgg.itface.test;
/*
* 如果要使用定义好的接口,必须有一个接口的实现类
* 定义实现类格式为
* public class 实现类名称 implements 接口名称(){
* 一定要覆盖重写所有的抽象方法
* }
*
* 什么是重写覆盖抽象方法
* 1.将接口当中的抽象方法抄写过来
* 2.去掉abstract方法
* 3.写上大括号方法体
*/
public class DemoPerson implements DemoInterFace{
@Override//方法重写
public void eat() {
System.out.println("今晚吃鸡了啊");
}
@Override
public String play(String things) {
// TODO Auto-generated method stub
return "今晚玩"+things+"啊";
}
public void sleep() {
System.out.println("睡觉");
}
}
package com.xgg.itface.test;
/*
* 如何使用接口和实现类
* 接口名称 引用名 =new 实现类名称();
* 引用名.抽象方法名
*
* 注意:左边是接口类型只能调用接口当中定义好的内容,不能调用右侧实现类中特有的内容(接口隔离)
* 当调用接口当中的抽象方法时,真正进行运行的是右侧new的时候的具体的方法
* 总结记住一句话,调用的时候看左边运行的时候看右边
*
*
* 面向接口编程:如果使用的的功能,接口已经可以满足,那么就可以不在乎具体的类是谁,只在乎接口就好了
*/
public class DemoTest {
public static void main(String[] args) {
DemoInterFace di=new DemoPerson();
di.eat();
String play=di.play("lol");
System.out.println(play);
// di.sleep();错误,无法调用右侧实现专有的方法,只能调用接口的方法,这就是接口的隔离性
}
}