`
eimhee
  • 浏览: 2115875 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

老紫竹JAVA基础培训(8),认识接口

阅读更多
 这讲我们来重点熟悉接口的使用,包括接口的声明,继承,属性的定义以及类的实现等。


原问地址:http://www.java2000.net/p11584

先看相关的代码

lession8/Lession8.java
  1. package lession8;
  2. import lession8.otherpackage.InterfaceOtherPackagePublic;
  3. /**
  4.  * 老紫竹JAVA基础培训(8),认识接口。<br>
  5.  * 
  6.  * 
  7.  * @author 老紫竹 JAVA世纪网(java2000.net)
  8.  * 
  9.  */
  10. public class Lession8 {
  11.   public static void main(String[] args) {
  12.     // 可以直接使用接口的属性
  13.     System.out.println(Test1.Number1);
  14.     // final类型是不能修改的
  15.     // Test1.Number2 ++;
  16.   }
  17. }
  18. /**
  19.  * 实现本package的接口
  20.  * 
  21.  * @author 老紫竹 JAVA世纪网(java2000.net)
  22.  * 
  23.  */
  24. class Test1 implements InterfaceSamePackage {
  25.   // 接口的方法必须是public的
  26.   // 虽然那面没写,但也是,这是规定
  27.   // 实现的方法也必须是public的
  28.   // 不写或者protected或者private都是错误的
  29.   @Override
  30.   public void testA() {
  31.   }
  32.   @Override
  33.   public void testB() {
  34.   }
  35. }
  36. /**
  37.  * 实现其它package的接口。<br>
  38.  * 对接口里面的方法实现同样必须是public的。
  39.  * 
  40.  * @author 老紫竹 JAVA世纪网(java2000.net)
  41.  * 
  42.  */
  43. class Test2 implements InterfaceOtherPackagePublic {
  44. }
  45. class Test3 implements InterfaceSamePackageAbstract {
  46.   @Override
  47.   public void testA() {
  48.   }
  49. }
  50. /**
  51.  * 类可以实现多个接口.<br>
  52.  * 即使那些接口之间已经存在继承关系也没问题。
  53.  * 
  54.  * @author 老紫竹 JAVA世纪网(java2000.net)
  55.  * 
  56.  */
  57. class Test4 implements InterfaceOtherPackagePublic,
  58.     InterfaceSamePackageAbstract, InterfaceSamePackageExtends {
  59.   // 你要实现的方法是这些接口要求实现的总和
  60.   // 也就是每个接口里的方法你都必须实现
  61.   // #######################
  62.   // #### 注意,############
  63.   // #######################
  64.   // InterfaceSamePackage 和 InterfaceSamePackageAbstract
  65.   // 我们有2个接口定义了各自的方法,但名字和参数(类型和顺序)完全相同
  66.   // 我们的实现只需要有一个就行了
  67.   // 如果2个接口要实现的功能不一样,强烈建议不要用相同的名字和参数
  68.   // 这属于设计问题,很严重的设计问题。
  69.   @Override
  70.   public void testA() {
  71.   }
  72.   @Override
  73.   public void testB() {
  74.   }
  75. }
  76. /**
  77.  * 如果你这个类只能实现所有接口的部分功能,可以用abstract类。<br>
  78.  * 
  79.  * @author 老紫竹 JAVA世纪网(java2000.net)
  80.  * 
  81.  */
  82. abstract class Test5 implements InterfaceOtherPackagePublic,
  83.     InterfaceSamePackageAbstract, InterfaceSamePackageExtends {
  84.   @Override
  85.   public void testB() {
  86.   }
  87. }
lession8/InterfaceSamePackage.java
  1. package lession8;
  2. /**
  3.  * 接口例子A.
  4.  * 
  5.  * @author 老紫竹 JAVA世纪网(java2000.net)
  6.  * 
  7.  */
  8. public interface InterfaceSamePackage {
  9.   // 接口里面声明的属性
  10.   // 默认必须是 public static final 的
  11.   // 无论你怎么写,结果都一样
  12.   // 不能使用 protected 修饰
  13.   // 以下几种写法无任何区别,结果都是一样的。
  14.   public static final int Number = 0;
  15.   int Number1 = 1;
  16.   public int Number2 = 2;
  17.   public final int Number3 = 3;
  18.   final int Number4 = 4;
  19.   static int Number5 = 5;
  20.   // 对象类型必须初始化。
  21.   public static final String name = "java2000.net";
  22.   void testA();
  23.   public void testB();
  24. }

lession8/InterfaceSamePackageAbstract.java
  1. package lession8;
  2. /**
  3.  * 其它package的default类型的接口。
  4.  * 
  5.  * @author 老紫竹 JAVA世纪网(java2000.net)
  6.  * 
  7.  */
  8. abstract interface InterfaceSamePackageAbstract {
  9.   public void testA();
  10. }
lession8/otherpackage/InterfaceOtherPackagePublic.java
  1. package lession8.otherpackage;
  2. /**
  3.  * 其它package的public类型的接口。
  4.  * 
  5.  * @author 老紫竹 JAVA世纪网(java2000.net)
  6.  * 
  7.  */
  8. public interface InterfaceOtherPackagePublic  {
  9. }
lession8/otherpackage/InterfaceOtherPackageDefault.java
  1. package lession8.otherpackage;
  2. /**
  3.  * 其它package的默认类型的接口。
  4.  * 
  5.  * @author 老紫竹 JAVA世纪网(java2000.net)
  6.  * 
  7.  */
  8. interface InterfaceOtherPackageDefault {
  9. }
lession8/InterfaceSamePackageExtends.java
  1. package lession8;
  2. import lession8.otherpackage.InterfaceOtherPackagePublic;
  3. /**
  4.  * 接口可以继承接口.<br>
  5.  * 请注意是extends 接口,不是implements.<br>
  6.  * 只有类(class)才能 implements 接口。<br>
  7.  * 一个接口可以同时继承多个接口。
  8.  * 
  9.  * @author 老紫竹 JAVA世纪网(java2000.net)
  10.  * 
  11.  */
  12. public interface InterfaceSamePackageExtends extends
  13.     InterfaceSamePackageAbstract, InterfaceSamePackage,
  14.     InterfaceOtherPackagePublic {
  15. }

测试,请注意每次测试后恢复现场。‘
1 尝试把接口的方法改成 protected 看看编译错误

2 尝试继承别的package的默认接口,看看编译错误

3 去掉 main方法里的那个注释,看看编译错误
  1.  Test1.Number2 ++; 
4 尝试在接口里声明一个对象属性,不初始化,看看编译错误


提示:
1 接口的方法都是public的,不能使用protected 修饰符


2 接口的属性都是 public static final 的,不允许修改


3 接口的对象属性必须初始化


差不多了,我能想到的关于接口的东西就这么多了,如果我以后发现了什么漏掉的,我会编辑这个帖子,并在回复里写上更新。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics