學習收獲
不知不覺野舶,Java學習已經(jīng)倆個多星期了易迹。收獲有,但覺得不大平道,這幾天學習的都說一些Java的知識睹欲,有理解的,也有懵比的一屋,當然窘疮,懵比的時候比較多,這時候就只能聽東哥代碼跟著寫罷了冀墨,很煩罢⑸馈!不懂的的方還是不懂诽嘉,這雞兒難受蔚出。我們也太難了!牢騷到此含懊,該說說今天的學習內(nèi)容:Java接口還有抽象類實戰(zhàn)
學習概況:
-
Java接口概念以及使用
-
抽象類學習以及實戰(zhàn)
-
編寫視圖按鈕窗口
過程
接口
-
1.接口概念
interface 接口名{
// 靜態(tài)常量,抽象方法
}
用于對象之間的通信
-
2.接口的特點
(1)接口中只能放靜態(tài)常量身冬、抽象方法。
(2)java接口是對功能的擴展(父類和抽象類中一般都存放的是通用的屬性和方法岔乔,我們一般把擴展的功能或特有的功能放到接口里酥筝,而不放在父類或抽象類中)。
(3)通過實現(xiàn)接口雏门,java類可以實現(xiàn)多實現(xiàn)(一個類可以實現(xiàn)多個接口嘿歌,即一個類可以有多種功能)。
(4)一個類只能繼承一個父類茁影,即extends關(guān)鍵字后面只能跟一個父類宙帝,但可以通過implements關(guān)鍵字實現(xiàn),多個接口募闲。
(5)接口與接口之間可以通過extends關(guān)鍵字來產(chǎn)生繼承關(guān)系(即接口繼承接口使用關(guān)鍵字extends)步脓。
-
3.接口與抽象類的區(qū)別
(1)抽象類與實現(xiàn)類之間是一種繼承關(guān)系,也就是說如果采用抽象類的方式,則父類與子類在概念上應(yīng)該是相同的靴患。
(2)接口和實現(xiàn)類在概念上不要求相同仍侥,接口只是抽取相互之間沒有關(guān)系的類的共同特征,而不去關(guān)注類之間的關(guān)系鸳君,它可以使沒有層次關(guān)系的類具有相同的行為农渊。
(3)抽象類是對一組具有相同屬性和行為的邏輯上有關(guān)系的事物的一種抽象,而接口是對一組具有相同屬性和行為的邏輯上不相關(guān)的事物的一種抽象或颊。
(4)對于接口和抽象類的選擇砸紊,反映出設(shè)計人員看待問題的不同角度。抽象類用于一組相關(guān)的事物囱挑,表示的是"is-a"(繼承)的關(guān)系醉顽,而接口用于一組不相關(guān)的事物,表示的是"like-a"(具備)的關(guān)系平挑。
抽象類
昨天關(guān)于抽象類學習已經(jīng)差不多了徽鼎。
當你確定需要一個對象或者方法,但不清楚什么時候用到弹惦,但它確實是需要的,我們就可以定義抽象類完成悄但。抽象類不能創(chuàng)建實例棠隐,它只能作為父類被繼承。抽象類是從多個具體類中抽象出來的父類檐嚣,它具有更高層次的抽象助泽。從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為其子類的模板嚎京,從而避免了子類的隨意性嗡贺。
- 抽象方法只作聲明,而不包含實現(xiàn)鞍帝,可以看成是沒有實現(xiàn)體的虛方法诫睬,抽象類的方法只能在子類中完成
- 抽象類不能被實例化
- 抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法帕涌,就一定要把這個類聲明為抽象類
實戰(zhàn)
今天御用抽象類和接口完成了一個界面摄凡。具體如下
-
定義view類
/**
* 管理視圖顯示事件監(jiān)聽
* 什么情況下需要將一個父類做出成模板
* 1.不能直接創(chuàng)建這個類的對象、
* 2.這個類里面的某些方法 還不確定如何實現(xiàn)
*/
public class view {
//所有的視圖都共有屬性
String backgroundcolor;//背景色
String bordcolor;//邊框色
//記錄艦艇這個事件
//展示不確定誰要監(jiān)聽
//但是要監(jiān)聽世間的人肯定實現(xiàn)了這個接口
OnclickListener Listener;
//所有的視圖都要監(jiān)聽事件
//定義一個內(nèi)部接口 封裝
public interface OnclickListener{
//定義一套規(guī)范 約束外部使用這些額方法來監(jiān)聽事件
void onClick(view v);
}
//模擬控件接收出沒時間
public void getTouchuEvent(){
//調(diào)用監(jiān)聽這里面的Onclick方法
System.out.println("被點擊了");
}
}
-
定義Butten類
/**
* 創(chuàng)建一個按鈕類
*/
public class Butten extends view{
String title;
String titlecolor;
public Butten(String title,String titlecolor){
this.title=title;
this.titlecolor=titlecolor;
}
}
-
定義一個ImageView類
/**
* 顯示一張圖片
*/
public class ImageView extends view{
String picture;
public ImageView(String picture){
this.picture=picture;
}
}
-
定義Activity類
/**
* 管理界面的抽象類蚓曼,頂貼以一個界面創(chuàng)建到結(jié)束的模板
*/
public abstract class Activity {
//保存這個界面的所有指示圖
public ArrayList<view> childs=new ArrayList<>();
//界面創(chuàng)建
public abstract void onCreate();
//界面銷毀
public abstract void onDestory();
//將子控件添加到當前界面上
//接收的時候是用父類區(qū)接收子類
//當需要訪問子類內(nèi)容是 就要羌之戰(zhàn)換韋對應(yīng)的類
public void addChild(view v){
if(v instanceof Butten){
Butten btn=(Butten)v;
System.out.println(btn.title+"按鈕被添加到到界面上了");
}
if(v instanceof ImageView){
ImageView iv=(ImageView)v;
System.out.println(iv.picture+"的圖片顯示的圖片");
}
//保存子控件
childs.add(v);
}
}
-
最后是MainActivity類的代碼
/**
* 主界面
*/
public class MainActivity extends Activity{
Butten btn;
ImageView img;
//構(gòu)造方法
public MainActivity(){
//當界面被船艦亲澡,立即調(diào)用onCreate方法
onCreate();
}
@Override
public void onCreate(){
//主界面如何布局
//添加一個按鈕
Butten btn=new Butten("分享","紅色");
//添加一張圖片
ImageView img=new ImageView("周杰倫");
//將創(chuàng)建的控件添加到當前界面
addChild(btn);
addChild(img);
//1.
//如果一個按鈕需要監(jiān)聽事件 bane必須實現(xiàn)監(jiān)聽事件的接口
//高數(shù)按鈕誰在監(jiān)聽這個事件
btn.Listener;
//2.
//
img.Listener=new view.OnclickListener() {
@Override
public void onClick(view v) {
System.out.println("圖片被點擊了");
}
};
}
//模擬觸摸
public void touch(){
//將屏幕被觸摸的事件傳遞給按鈕
btn.getTouchuEvent();
img.getTouchuEvent();
}
@Override
public void onDestory(){
}
public void onClick(view v){
System.out.println("按鈕點擊了");
}
}
結(jié)語
后面都好難啊,好多都是不太清楚的纫版。先學一步是一步吧床绪。到后面用多了就會明白吧