接口声明格式
[访问修饰符] interface 接口名 [extends 父接口1,父接口2…] {常量定义;方法定义;}
在jdk1.8之前,接口中只有两部分内容:
- 常量,固定修饰符:public static final
抽象方法,固定修饰符:public abstract
/*** 1.类是类,接口是接口,它们是同一层次的概念。* 2.接口中没有构造器* 3.接口如何声明:interface* 4.在JDK1.8之前,接口中只有两部分内容:* (1)常量:固定修饰符:public static final* (2)抽象方法:固定修饰符:public abstract* 注意:修饰符可以省略不写,IDE会帮你自动补全,但是初学者建议写上,防止遗忘。*/public interface TestInterface01 {//常量:/*public static final*/ int NUM = 10;//抽象方法:/*public abstract*/ void a();/*public abstract*/ void b(int num);/*public abstract*/ int c(String name);}interface TestInterface02{void e();void f();}/*5.类和接口的关系是什么? 实现关系 类实现接口:6.一旦实现一个接口,那么实现类要重写接口中的全部的抽象方法:7.如果没有全部重写抽象方法,那么这个类可以变成一个抽象类。8.java只有单继承,java还有多实现一个类继承其他类,只能直接继承一个父类但是实现类实现接口的话,可以实现多个接口9.写法:先继承 再实现:extends Person implements TestInterface01,TestInterface02*/class Student extends Person implements TestInterface01,TestInterface02 {@Overridepublic void a() {System.out.println("---1");}@Overridepublic void b(int num) {System.out.println("---2");}@Overridepublic int c(String name) {return 100;}@Overridepublic void e() {System.out.println("---3");}@Overridepublic void f() {System.out.println("---4");}}class Test{//这是一个main方法,是程序的入口:public static void main(String[] args) {//10.接口不能创建对象://TestInterface02 t = new TestInterface02();TestInterface02 t = new Student();//接口指向实现类 ---》多态//11.接口中常量如何访问:System.out.println(TestInterface01.NUM);System.out.println(Student.NUM);Student s = new Student();System.out.println(s.NUM);TestInterface01 t2 = new Student();System.out.println(t2.NUM);}}
接口的作用是什么?
定义规则,只是跟抽象类不同地方在哪?它是接口不是类。
接口定义好规则之后,实现类负责实现即可。多态的应用场合:
父类当做方法的形参,传入具体的子类的对象
- 父类当做方法的返回值,返回的是具体的子类的对象
- 接口当做方法的形参,传入具体的实现类的对象
-
接口和抽象类的区别
抽象类
抽象类使用abstract修饰
- 抽象类不能实例化,即不能使用new关键字来实例化对象
- 含有抽象方法(使用abstract关键字修饰的方法)的类是抽象类,必须使用abstract关键字修饰
- 抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以具体的方法
- 如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类
- 抽象类中的抽象方法只有方法体,没有具体实现
接口
- 接口使用interface修饰
- 接口不能被实现化
- 一个类只能继承一个类,但是可以实现多个接口
- 接口中方法均为抽象方法
- 接口中不能包含实例域或静态方法(静态方法必须实现,接口中方法是抽象方法,不能实现)
