介面
介面可以理解為一種特殊的類,由全域性成量和公共的抽象方法所組成。
類是一種具體實現體,而介面定義了某一批類所需要遵守的規範,介面不關心這些類的內部資料,也不關心這些類裡方法的實現細節,它只規定這些類裡必須提供某些方法。
介面定義
和類定義不同,定義介面不在使用class關鍵字,而是使用interface關鍵字。
介面定義的基本語法
[修飾符] interface 介面名
{ 零個到多個常量定義。。。
零個到多個抽象方法的定義。。。。
}
介面中的方法只能是抽象方法,總是使用,即使定義時不新增 public abstract 修飾符。系統也會自動加上。
介面使用
一個類可以實現一個或多個介面,實現介面使用implements
關鍵字。java中一個類只能繼承一個父類,是不夠靈活的,通過實現多個介面可以做補充。
繼承父類實現介面語法
[修飾符] class 類名 extends 父類 implements 介面1 ,介面2
{ 類體部分//如果繼承了抽象類,需要實現繼承的 抽象方法;要實現介面的抽象方法。 }
如果要繼承父類,繼承父類必須在實現介面之前
介面的使用
介面在使用過程中,還經常與匿名內部類配合使用 匿名內部類就是沒有名字的內部類 多用於關注實現而不關注實現類的名字
介面與類的區別
- 介面不能用於例項化物件。
- 介面沒有構造方法。
- 介面中所有的方法必須是抽象方法。
- 介面不能包含成員變數,除了 static 和 final 變數。
- 介面不是被類繼承了,而是要被類實現。
- 介面支援多繼承
練習題
練習題一: 中國特色社會主義的體制中有這樣的現象:地方省政府要堅持黨的領導和按
照國務院的指示進行安全生產。請編寫一個java應用程式描述上述的體制現象。
要求如下:
(1)該應用程式中有一個“黨中央”介面:CentralPartyCommittee,該介面中
有個“堅持黨的領導”方法:void partyLeader()
(2)該應用程式中有一個“國務院”抽象類:StateCouncil,該抽象類中有個“安
全生產”的抽象方法:abstract void safetyInProduction()
(3)該應用程式中有一個“省政府”類:Province,該類繼承StateCouncil抽象
類並且實現CentralPartyCommittee介面;在實現partyLeader()方法時輸出“我們
各省人民一定堅持黨的領導!”;在重寫safetyInProduction()方法時輸出“我們各
省人民一定按照國務院的指示進行安全生產!”。
(4)該應用程式中有一個主類E,在主類E的main方法中建立Province類的對
象,來測試Province類的功能。
程式程式碼:
public interface CentralPartyCommittee {
void partyLeader( );
複製程式碼
}
public abstract class StateCouncil {
abstract void safetyInProduction();
複製程式碼
}
public class Province extends StateCouncil implements CentralPartyCommittee{
public void partyLeader() {
System.out.println("我們各省人民一定堅持黨的領導!");
}
@Override
public void safetyInProduction() {
System.out.println("我們各省人民一定按照國務院的指示進行安全生產!");
}
複製程式碼
}
public class E { public static void main(String[] args) {
CentralPartyCommittee centralPartyCommittee=new Province();
centralPartyCommittee.partyLeader();
}
複製程式碼
}
練習題: 按如下要求編寫Java程式:
(1)編寫介面InterfaceA,介面中含有方法void printCapitalLetter()。
(2)編寫介面InterfaceB,介面中含有方法void printLowercaseLetter()。
(3)編寫非抽象類Print,該類實現了介面InterfaceA和InterfaceB。要求printCapitalLetter()方法實現輸出大寫英文字母表的功能,printLowercaseLetter()方法實現輸出小寫英文字母表的功能。
(4)再寫一個主類Test,在main方法中建立Print的物件並賦值給InterfaceA的變數a,由變數a呼叫printCapitalLetter方法,然後再建立Print的物件並將該物件賦值給InterfaceB的變數b,由變數b呼叫printLowercaseLetter方法。
public interface InterfaceA {
void printCapitalLetter();
複製程式碼
}
public interface InterfaceB {
void printLowercaseLetter();
複製程式碼
}
public class Print implements InterfaceA,InterfaceB {
@Override
public void printCapitalLetter() {
System.out.println("ZXCVBNMASDFGHJKLQWERTYUIOP");
}
@Override
public void printLowercaseLetter() {
System.out.println("zxcvbnmasdfghjklqwertyuiop");
}
複製程式碼
}
public class Test {
public static void main(String[] args) {
InterfaceA a=new Print();
a.printCapitalLetter();
InterfaceB b=new Print();
b.printLowercaseLetter();
}
複製程式碼
}
陣列
1.宣告資料 語法:資料型別[] 陣列名:
或者:資料型別 陣列名[]
:int[] scores;
2.分配空間 簡單的說,就是指定陣列中最多可儲存多少個元素
語法:
陣列名 = new 資料型別[陣列的長度] scores = new int[5];
3.賦值
分配空間後就可以向陣列放資料了,陣列中元素都是通過下標來訪問的。例如scores陣列中存放學生成績
scores[0] = 89;
scores[1] = 79;
4.處理陣列中資料
我們可以對賦值後的資料進行操作和處理,如獲取並輸出陣列中元素的值 System.out.print(scores[0]);
習題練習
用陣列列印abc
public class abc { public static void main(String[] args) {
String[] sun;
sun = new String[3];
sun[0]="A";
sun[1]="B";
sun[2]="C";
System.out.println(sun[0]);
System.out.println(sun[1]);
System.out.println(sun[2]);
複製程式碼
} }
運算陣列的和與平均值
public static void main(String[] args) {
int[] sun;
sun = new int[3];
sun[0] = 10;
sun[1] = 20;
sun[2] = 30;
int shun = 0;
for (int i = 0; i < sun.length; i++) {
shun = sun[i] + shun;
}
System.out.println(shun);
System.out.println(shun/sun.length);
複製程式碼
解析:
package tuxing;這句是打包語句,
public class lingxing 這是宣告一個公有的類
public static void main(String[] args)這是主函式,Java程式執行的入口
int a[]={2,4,5,7,5},i,s;這裡宣告瞭一個int型陣列a併為其制定元素值,還宣告瞭兩個int型變數i,s;
s=0;為s付初始值0;
for(i=0;i<5;i++)for迴圈語句i=0是為上面宣告的int型變數i付初始值,i<5是判斷i是否小於5,i++是每次執行後i自動加1
s += a[i]; 是求int陣列a的五個元素的和,(因為for迴圈內只有一條語句所以可以吧for(){}後面的{}省略)
System.out.print(s);這是在控制檯列印出s的值
如果是失球平均值緊要換成System.out.print(s/5); 解析完。
例子:
// 反序輸出{我愛你}
char[] love;
love = new char[3];
love[0] = '我';
love[1] = '愛';
love[2] = '你';
for (int i = love.length - 1; i >= 0; i--) {
System.out.print(love[i]);
複製程式碼