接口
接口的定義
接口(英文:Interface)啸驯,在JAVA編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合喊括,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式矢棚,從而來(lái)繼承接口的抽象方法郑什。
接口的特性
1.接口中每一個(gè)方法也是隱式抽象的,接口中的方法會(huì)被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會(huì)報(bào)錯(cuò))蒲肋。
2.接口中可以含有變量蘑拯,但是接口中的變量會(huì)被隱式的指定為 public static final 變量(并且只能是 public,用 private 修飾會(huì)報(bào)編譯錯(cuò)誤)兜粘。
3.接口中的方法是不能在接口中實(shí)現(xiàn)的申窘,只能由實(shí)現(xiàn)接口的類來(lái)實(shí)現(xiàn)接口中的方法。
4.接口里不能定義 代碼塊 和 構(gòu)造方法 妹沙。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口(每個(gè)接口之間用逗號(hào)隔開(kāi))偶洋。接口可以繼承其他接口并且可以繼承多個(gè)接口
如何聲明接口
接口的聲明語(yǔ)法格式如下:
interface 接口名稱 [extends 其他的接口名] {
// 聲明變量
// 抽象方法
}
匿名類
匿名類的定義
匿名類,就是沒(méi)有名稱的類距糖,其名稱由Java編譯器給出玄窝,一般是形如:外部類名稱+$+匿名類順序,沒(méi)有名稱也就是其他地方就不能引用悍引,不能實(shí)例化恩脂,只用一次,當(dāng)然也就不能有構(gòu)造器趣斤。
匿名類的代碼格式
new父類(){子類內(nèi)容}俩块;
代碼實(shí)例
img.listener=new view.onClickListener() {
@Override
public void onClick(view v) {
System.out.println("圖片被點(diǎn)擊了");
}
};
具體應(yīng)用
使用接口和抽象類來(lái)模擬屏幕點(diǎn)擊后的反應(yīng)
主類
public class myClass {
public static void main(String[] args)
{
charge main=new charge();
main.touch();
}
}
管理界面
package Day7;
public class charge extends Activity implements view.onClickListener{
public charge()
{
oncreat();
}
newButton btn;
ImageView img;
@Override
public void oncreat() {
//主界面如何布局
//按鈕
btn=new newButton("分享","紅色");
//圖片
img=new ImageView("千戶 尤莉");
//將控件添加到本頁(yè)面
addChild(btn);
addChild(img);
//如果一個(gè)事物要監(jiān)聽(tīng)
//1
btn.listener=this;
// 2
//給imageView添加一個(gè)事件
//使用的是匿名類,onClick方法已被重寫(xiě)
img.listener=new view.onClickListener() {
@Override
public void onClick(view v) {
System.out.println("圖片被點(diǎn)擊了");
}
};
}
//模擬觸摸
public void touch()
{
//將屏幕觸摸的事件傳遞給按鈕
btn.getTouchEvent();
img.getTouchEvent();
}
@Override
public void desdroy() {
// 關(guān)閉前需要做什么
}
//當(dāng)事件觸發(fā)就會(huì)調(diào)用這個(gè)方法
@Override
public void onClick(view v) {
System.out.println("按鈕被點(diǎn)擊");
}
}
生成界面
package Day7;
import java.util.ArrayList;
public abstract class Activity {
ArrayList<view> charge=new ArrayList<>();
//創(chuàng)建界面
public abstract void oncreat();
//關(guān)閉界面
public abstract void desdroy();
//將子控件添加在主頁(yè)面
public void addChild(view v )
{
if (v instanceof newButton)
{
newButton btn=(newButton)v;
System.out.println(btn.title+"按鈕顯示到界面");
}
if (v instanceof ImageView)
{
ImageView btn=(ImageView)v;
System.out.println(btn.picture+"按鈕顯示到界面");
}
//保存子控件
charge.add(v);
}
}
監(jiān)聽(tīng)反應(yīng)
package Day7;
public class view {
String backgroundcolor;
String borderColor;
//記錄是誰(shuí)想監(jiān)聽(tīng)這個(gè)事件
//
//想要監(jiān)聽(tīng)的人一定實(shí)現(xiàn)了該接口
onClickListener listener;
//定義內(nèi)部接口 封裝
public interface onClickListener
{
//定義一套方法 約束外部使用這些方法來(lái)監(jiān)聽(tīng)事件
void onClick(view v );
}
//圖片或按鈕被點(diǎn)擊時(shí)就會(huì)調(diào)用這個(gè)方法
public void getTouchEvent()
{
//調(diào)用監(jiān)聽(tīng)者里的onClick方法
listener.onClick(this);
}
}
按鈕類
package Day7;
public class newButton extends view{
String title;
String titeColor;
public newButton(String title,String titeColor)
{
this.titeColor=titeColor;
this.title=title;
}
}
圖像類
package Day7;
public class ImageView extends view {
String picture;
public ImageView(String picture)
{
this.picture=picture;
}
}
運(yùn)行結(jié)果