接口(接口的作用非常的丰富,往往和设计模式结合在一起的):
- 概念:可以认为接口是一种“彻底”的抽象类,接口是从多个相似的类中抽取出来的一种规范,接口的体现是规范(通信规范),如主板上各种不同类型的“插槽”,无论哪个厂商,无论哪个型号的主板,它们都可以与CPU、显卡、内存进行数据通信——因为国际上有一套公开的“标准”(规范),就是通过接口体现出来。
- 定义的语法:
【修饰符】 interface 接口名 { //0 ~ N个Field定义 //0 ~ N个抽象方法 //0 ~ N个内部类、内部接口、内部枚举定义 }
注意:
接口不能有构造器、初始化块;
修饰符可以为:public或省略;不能使用static修饰、不能用final(不允许有子类)修饰、不用abstract;
接口名:多个单词连缀而成,每个单词的首字母大写,推荐接口用“形容词”,在有些地方(c#),推荐接口以I开头,后来有些Java程序员也用这种方式,【接口里的成分,都是public,因为接口体现的时公开的标准】;
接口里的Field,默认有3个修饰符:public、static、final,无论写还是不写,反正都有【接口里的Field,声明时必须指定初始值,因为final修饰的类变量只能在声明时,静态初始化中指定初始值,又由于接口不包含初始化块,所以只能在声明时指定初始值】;
接口里的方法,默认有2个修饰符:public、abstract,无论写还是不写,反正都有【接口里的方法不可能是static,因为接口里的方法默认有abstract修饰】;
接口里的内部类、内部接口、内部枚举,默认有2个修饰符,public、static,无论写还是不写,反正都有;
abstract和static不能同时修饰方法、abstract与private不能让同时修饰方法、abstract与final不能同时出现,二者永远互斥;
一个接口可以有N个直接父接口。有了接口之后,接口可以用于定义变量,接口不可以创建实例,接口最大的用途就是供其他类实现自己;
implements实现一个或者N个接口,当一个类实现接口之后,实现类要么为抽象父类的所有抽象方法提供实现,否则你的子类也只能是抽象类;
- 接口主要在“面向接口编程”时候,提供更灵活的机制
interface A { } interface B { } interface C { } //一个接口,可以拥有N个直接的父接口 public interface D extends A,B,C { }
interface Eatable { void eat(); } interface Flyable { void fly(); } public interface Walkable extends Eatable { int AGE = 20; //对于执行“宏替换”,变量名应该是多个单词连缀而成,并且所有字母全部大写,单词与单词之间以下划线隔开 final String MY_NAME = "张三"; //接口里的成分只能用public修饰,可省略 double weight = 34.4; //方法前面默认有public abstract修饰。 void info(); //方法前面默认有abstract修饰,所以方法后面坚决不能有花括号 // void test(){} //错误 } //一个类可以同时“实现”N个接口 public class Sparrow implements Flyable, Walkable { @Override public void eat() { System.out.println("麻雀一口一口地吃麦子"); } public void fly() { System.out.println("麻雀在天空飞翔"); } public void info() { System.out.println("我是一只小麻雀"); } public static void main(String[] args) { //向上转型 Walkable w = new Sparrow(); //w引用变量,在编译时只是Walkable类型 //因此,编译器只能允许调用Walkable里的方法 w.eat(); //麻雀一口一口地吃麦子 w.info(); //我是一只小麻雀 //强转,向下转型 Sparrow sp = (Sparrow) w; sp.eat(); //麻雀一口一口地吃麦子 sp.fly(); //麻雀在天空飞翔 sp.info(); //我是一只小麻雀 Sparrow fy = new Sparrow(); fy.fly(); //麻雀在天空飞翔 } }
- 说明:
- 接口与抽象类之间的相似之处:都可以包含抽象方法;都不能创建实例;子类继承抽象类,实现接口,都要求实现所有的抽象方法,否则子类也只能是抽象类
接口与抽象类之间的区别之处:接口里只能有抽象方法,但抽象类可以没有抽象方法,只包含普通方法;接口里不能定义静态方法,但抽象类可以包含静态方法;接口里的Field总是有public、static、final,但抽象类中的Field完全可以是最普通的Field;接口不能包含构造器,但抽象类完全可以有构造器;接口不能包含初始化块,但抽象类完全可以有初始化块;接口可以有多个直接的父接口,但抽象类只能有一个直接父类。
JAVA之定义接口的语法规则
猜你喜欢
转载自blog.csdn.net/qq_38358499/article/details/100600212
今日推荐
周排行