Java中的接口定义与实例

一、接口定义

Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

 

接口定义的一般形式为:

 [访问控制符]interface <接口名> {

类型标识符final 符号常量名n = 常数;

返回值类型  方法名([参数列表]);

      …

}

 

二、接口的特点

1、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

3、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

4、接口中没有构造方法,不能被实例化

5、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

6、Java接口必须通过类来实现它的抽象方法

7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

8、不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9、  一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.

 

三、接口最简单的实现方法

 1 package com.frewen.interfacedemo;
 2 
 3  
 4 
 5     interface SwimInterface{  
 6 
 7        void swim();
 8 
 9     }
10 
11     class   Fish{  
12 
13        int  fins=4;
14 
15     }
16 
17     class  Duck {  
18 
19       int  leg=2;
20 
21       void egg(){};
22 
23     }
24 
25    
26 
27     class Goldfish extends Fish implements  SwimInterface {
28 
29        @Override
30 
31        public void swim() {
32 
33             System.out.println("Goldfish  can swim ");
34 
35        } 
36 
37     }
38 
39    
40 
41     class SmallDuck  extends Duck implements  SwimInterface {
42 
43        public void egg(){
44 
45            System.out.println("SmallDuck  can lay  eggs ");
46 
47        }
48 
49        @Override
50 
51        public void swim() {
52 
53           System.out.println("SmallDuck  can swim ");
54 
55        }
56 
57     }
58 
59  
60 
61     public class InterfaceDemo {      
62 
63        public static void main(String[] args) {
64 
65            Goldfish goldfish=new Goldfish();
66 
67            goldfish.swim();
68 
69  
70 
71            SmallDuck smallDuck= new SmallDuck();
72 
73            smallDuck.swim();
74 
75            smallDuck.egg();
76 
77     }
78 
79 }

上面只是我们最经常使用接口的方法,但是还不是接口最精妙的地方。下面来讲一下接口最精妙的地方,这个也是接口真正的意义所在。

接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,【接口名】 【对象名】=new 【实现接口的类】,这样你像用哪个类的对象就可以new哪个对象了,不需要改原来的代码。

假如我们两个类中都有个function()的方法,如果我用接口,那样我new a();就是用a的方法,new b()就是用b的方法

这个就叫统一访问,因为你实现这个接口的类的方法名相同,但是实现内容不同

我用接口来定义对象不就可以做到统一访问了吗?接口主要针对多个类实现它来说的,要是只有一个类当然可以不用接口了.你这样想,我做一个USB接口,有个read()抽象方法,然后mp3类实现,U盘类实现,移动硬盘类实现,这样我用的时候用USB a=new 【类名】;这样a.read();要是我类名里写U盘,就读U盘,写mp3就读mp3,而这个名字可以从属性文件里读,你写哪个就用哪个了

在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔。

这时就可能出现常量或方法名冲突的情况,解决该问题时,如果常量冲突,则需要明确指定常量的接口,这可以通过“接口名.常量”实现。如果出现方法冲突时,则只要实现一个方法就可以了。下面通过一个具体的实例详细介绍以上问题的解决方法。

posted @ 2014-09-16 20:22  半落枫桥  阅读(388)  评论(0)    收藏  举报