JAVA之接口
一、什么是接口
1、Java语言中存在的结构,有特定的语法和结构。
2、接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。
3、接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了“如果你是……则必须能……”的理念。
3、接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了“如果你是……则必须能……”的理念。
2、Java语言中一个类所具有的方法的特征集合,是一种逻辑上的抽象。
二、接口的作用
1、利于代码的规范
这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
2、有利于对代码进行维护
可以一开始定义一个接口,把功能菜单放在接口里,然后定义类时实现这个接口,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
3、保证代码的安全和严密
一个好的程序一定符合高内聚低耦合的特征,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。
这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
2、有利于对代码进行维护
可以一开始定义一个接口,把功能菜单放在接口里,然后定义类时实现这个接口,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
3、保证代码的安全和严密
一个好的程序一定符合高内聚低耦合的特征,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。
三、接口的规范使用
1、接口中可以定义常量,不能定义变量,接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值。
2、 接口中所有的方法都是抽象方法,接口中方法都会自动用public abstract 修饰,即接口中只有全局抽象方法。
3、 接口不能实例化,接口中不能有构造。
4、 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
5、 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
2、 接口中所有的方法都是抽象方法,接口中方法都会自动用public abstract 修饰,即接口中只有全局抽象方法。
3、 接口不能实例化,接口中不能有构造。
4、 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
5、 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
四、接口应用举例
(1)首先创建一个interface文件定义接口animal
public interface Animal { public void eat(); public void run(); }(2)创建一个类文件定义类Lion(注明:该类若要实现接口,则必须实现该接口的所有方法,否则该类为抽象类)
public class Lion implements Animal { public void eat() { System.out.println("I eat meat!"); } public void run() { System.out.println("I run fast"); } public int Legnum() { return 4; } public static void main(String args[]) { Lion lion = new Lion(); lion.eat(); lion.run(); } }
五、接口、抽象类的区别
六、相关思考
问题1:接口与静态方法的关系?
JDK8前,接口只能是抽象方法。
但是在JDK8中,静态方法是可以直接定义方法体,可以直接用接口名调用。实现类和实现是不可以调用的
为什么接口不能实现静态方法的理由(在JDK8之前)?
接口的方法都是只定义不实现,而静态方法是必须实现。
接口的规范就是只定义方法或常量,不能实现任何方法,定义的是一种规范,告诉你如果要继承这个接口,就得实现我规定的方法。
接口使用静态方法的应用举例:
注意:
(1)接口中的静态方法与在类中写静态方法没有区别
(2)接口的静态方法实现类以及实现是不可以调用的,但是可以直接用接口名调用:如:Animal.静态方法()
(1)接口Animal
public interface Animal { // 接口定义的方法 public void eat(); public void Animal_Name(String name);// 方法没有返回体,所以没有返回值 // 静态方法 public static void print() { System.out.println("This is interface Animal!"); }; public static String Type1(String type) { return type; }; }(2)Lion类
public class Lion implements Animal{ @Override public void eat() { // TODO Auto-generated method stub System.out.println("I eat meat!"); } public void Animal_Name(String name){ System.out.println("My name is: "+name); } //静态方法可以直接用接口名调用,但是实现类和实现是不可以调用的 public static void main(String args[]) { Lion lion = new Lion(); lion.eat(); lion.Animal_Name("lion"); //如果需要某静态方法 可 直接调用Ainmal接口的静态方法 Animal.print(); String type = Animal.Type1("Lion"); System.out.println("Type is : "+type); } }
延申:什么是静态方法?
参考回答:
应用举例:
public class Lion { public static String getName() { return "Lion"; } public int Legnum() { return 4; } public static void main(String args[]) { // 对于静态方法getName在创建对象前就可以使用 String name = Lion.getName(); System.out.println(name); // 而非静态方法必须通过new出来的对象调用 Lion lion = new Lion(); int num = lion.Legnum(); System.out.println(num); //静态方法getName也可以通过new出来的对象调用 String name1 = lion.getName(); System.out.println(name1); } }
问题二:哪些类不可实例化对象?
接口,抽象类不可以,以及一些构造方法私有的不可以在外部被实例化