這講我們來重點熟悉接口的使用,包括接口的聲明,繼承,屬性的定義以及類的實現 等。
最終的目錄結構
先看相關的代碼
lession8/Lession8.java
package lession8;
import lession8.otherpackage.InterfaceOtherPackagePublic;
/**
* 老紫竹JAVA基礎培訓(8),認識接口。<br>
*
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class Lession8 {
public static void main(String[] args) {
// 可以直接使用接口的屬性
System.out.println(Test1.Number1);
// final類型是不能修改的
// Test1.Number2 ++;
}
}
/**
* 實現本package的接口
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
class Test1 implements InterfaceSamePackage {
// 接口的方法必須是public的
// 雖然那面沒寫,但也是,這是規定
// 實現的方法也必須是public的
// 不寫或者protected或者private都是錯誤的
@Override
public void testA() {
}
@Override
public void testB() {
}
}
/**
* 實現其它package的接口。<br>
* 對接口裡面的方法實現同樣必須是public的。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
class Test2 implements InterfaceOtherPackagePublic {
}
class Test3 implements InterfaceSamePackageAbstract {
@Override
public void testA() {
}
}
/**
* 類可以實現多個接口.<br>
* 即使那些接口之間已經存在繼承關系也沒問題。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
class Test4 implements InterfaceOtherPackagePublic,
InterfaceSamePackageAbstract, InterfaceSamePackageExtends {
// 你要實現的方法是這些接口要求實現的總和
// 也就是每個接口裡的方法你都必須實現
// #######################
// #### 注意,############
// #######################
// InterfaceSamePackage 和 InterfaceSamePackageAbstract
// 我們有2個接口定義了各自的方法,但名字和參數(類型和順序)完全相同
// 我們的實現只需要有一個就行了
// 如果2個接口要實現的功能不一樣,強烈建議不要用相同的名字和參數
// 這屬於設計問題,很嚴重的設計問題。
@Override
public void testA() {
}
@Override
public void testB() {
}
}
/**
* 如果你這個類只能實現所有接口的部分功能,可以用abstract類。<br>
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
abstract class Test5 implements InterfaceOtherPackagePublic,
InterfaceSamePackageAbstract, InterfaceSamePackageExtends {
@Override
public void testB() {
}
}
lession8/InterfaceSamePackage.java
package lession8;
/**
* 接口例子A.
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public interface InterfaceSamePackage {
// 接口裡面聲明的屬性
// 默認必須是 public static final 的
// 無論你怎麼寫,結果都一樣
// 不能使用 protected 修飾
// 以下幾種寫法無任何區別,結果都是一樣的。
public static final int Number = 0;
int Number1 = 1;
public int Number2 = 2;
public final int Number3 = 3;
final int Number4 = 4;
static int Number5 = 5;
// 對象類型必須初始化。
public static final String name = "java2000.net";
void testA();
public void testB();
}
lession8/InterfaceSamePackageAbstract.java
package lession8;
/**
* 其它package的default類型的接口。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
abstract interface InterfaceSamePackageAbstract {
public void testA();
}
lession8/otherpackage/InterfaceOtherPackagePublic.java
package lession8.otherpackage;
/**
* 其它package的public類型的接口。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public interface InterfaceOtherPackagePublic {
}
lession8/otherpackage/InterfaceOtherPackageDefault.java
package lession8.otherpackage;
/**
* 其它package的默認類型的接口。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
interface InterfaceOtherPackageDefault {
}
lession8/InterfaceSamePackageExtends.java
package lession8;
import lession8.otherpackage.InterfaceOtherPackagePublic;
/**
* 接口可以繼承接口.<br>
* 請注意是extends 接口,不是implements.<br>
* 只有類(class)才能 implements 接口。<br>
* 一個接口可以同時繼承多個接口。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public interface InterfaceSamePackageExtends extends
InterfaceSamePackageAbstract, InterfaceSamePackage,
InterfaceOtherPackagePublic {
}
測試,請注意每次測試後恢復現場。‘
1 嘗試把接口的方法改成 protected 看看編譯錯誤
2 嘗試繼承別的package的默認接口,看看編譯錯誤
3 去掉 main方法裡的那個注釋,看看編譯錯誤
Test1.Number2 ++;
4 嘗試在接口裡聲明一個對象屬性,不初始化,看看編譯錯誤
提示:
1 接口的方法都是public的,不能使用protected 修飾符
2 接口的屬性都是 public static final 的,不允許修改
3 接口的對象屬性必須初始化
差不多了,我能想到的關於接口的東西就這麼多了,如果我以後發現了什麼漏掉的, 我會編輯這個帖子,並在回復裡寫上更新。