接口回調(diào)是指:可以把使用某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量,那么該接口變量就可以調(diào)用被類實現(xiàn)的接口的方法。實際上,當接口變量調(diào)用被類實現(xiàn)的接口中的方法時,就是通知相應的對象調(diào)用接口的方法,這一過程稱為對象功能的接口回調(diào)。
成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、定遠網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5網(wǎng)站設計、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、外貿(mào)網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為定遠等各大城市提供網(wǎng)站開發(fā)制作服務。
示例代碼:
interface People{ //接口
void peopleList();
}
class Student implements People{ //接口實現(xiàn)類
public void peopleList(){ //實現(xiàn)接口方法
System.out.println("I'm a student.");
}
}
class Teacher implements People{ //接口實現(xiàn)類
public void peopleList(){ //實現(xiàn)接口方法
System.out.println("I'm a teacher.");
}
}
public class Example{
public static void main(String args[]){
People a; //聲明接口變量
a=new Student(); //實例化,接口變量中存放對象的引用
a.peopleList(); //接口回調(diào)
a=new Teacher(); //實例化,接口變量中存放對象的引用
a.peopleList(); //接口回調(diào)
}
}
輸出結果:
I’m a student.
I’m a teacher.
舉個面積的例子:在java中,定義一個接口,聲明計算長方形面積和周長的抽象方法,再用一個類去實現(xiàn)這個接口,再編寫一個測試類去使用這個接口。首先,接口必須單獨存放,如果我們用eclipse編程的話,它們提示:The public type **** must be defined in its own file,意思是必須要定義在其自己的文件中,所以要為接口文件單獨存放起來,舉例,我們的接口要實現(xiàn)獲到矩形的長,寬,面積,周長,所以定義以下的接口。public interface calrect {
public abstract int calarea();
public abstract int calgirth();
public abstract int getx();
public abstract int gety();
}注意,定義接口就像定義類一樣,接口的訪問控制符只能用public,用public定義的接口可以被所有的類和包引用,而缺省的則只能被同一個包中的其他類和接口引用,這符合JAVA中訪問控制符的一般要求,關于接口再引用其他接口則是后話。以上接口文件名為calrect.java.另外需要指出的是接口中不能給方法給出方法體。接下來,需要定義一個類來實現(xiàn)接口,因為不知道JAVA的內(nèi)置矩形類是什么名,所以為了安全,將該類定義為RRect,這可以認為是一種安全策略。關于implements,可以參考其他資料。該類引用了接口calrect,所以必須對calrect中的方法一一實現(xiàn)。//定義矩形類 應用接口class RRect implements calrect{private int x;
private int y;public RRect (){
x=3;y=4;
}
public int calarea(){
return x*y;
}
public int calgirth(){
return x*2+y*2;
}
public int getx(){
return x;
}
public int gety(){
return y;
}
}//接下來,定義一個測試類,所謂測試類,我理解為定義一個類,在其定義類RRect的對象,并驗證其中的方法,看看是不是可以正常使用//定義Class1類
public class Class1{
RRect rect;
public static void main(String []args){
RRect rect=new RRect();
System.out.println("矩陣的長"+ rect.getx());
System.out.println("矩陣的寬"+ rect.calarea());
System.out.println("矩陣的面積"+ rect.calarea());
System.out.println("矩形的周長 "+rect.calgirth());
}
}運行結果:矩陣的長3
矩陣的寬12
矩陣的面積12
矩形的周長 14注:接口單存放,接口實現(xiàn)類和測試類可以存放在一個文件中
//接口
public?interface?BankCard?{
public?void?norm();
}
//工商銀行實現(xiàn)類
public?class?ICBCBankCard?implements?BankCard?{
@Override
public?void?norm()?{
//?TODO?銀行規(guī)范
}
public?void?saveMoney(int?money){
//TODO?執(zhí)行存錢動作?
}
public?void?transfer(String?account,int?money){
//TODO?執(zhí)行轉賬?動作
}
}
//交通銀行實現(xiàn)類
public?class?CommunicationsBankCard?implements?BankCard?{
@Override
public?void?norm()?{
//?TODO?銀行規(guī)范
}
public?void?saveMoney(int?money){
//TODO?執(zhí)行存錢動作?
}
public?void?transfer(String?account,int?money){
//TODO?執(zhí)行轉賬?動作
}
}
上面的例子只是申明了通用的規(guī)范,如果想讓實現(xiàn)類都能實現(xiàn)存錢和轉賬功能,可以在接口里面聲明這兩個方法,寫一個通用的實現(xiàn)類,實現(xiàn)這些方法,然后具體的子類繼承該通用類,這樣可以直接繼承父類方法,如果不同的銀行具體實現(xiàn)不同,可以復寫父類中的兩個方法。
OK的,樓主,我運行過了,如下:
interface DriveControl {
void startEngine();
}
interface Repairable {
void repair();
}
public class Car implements DriveControl, Repairable {
String model;
public Car() {
System.out.println("Car init");
}
public Car(String model) {
this.model = model;
}
void printModel() {
System.out.println("The model of this car is" + this.model);
}
public void startEngine() {
System.out.println("Start engine");
}
public void repair() {
System.out.println("Car is repaired");
}
public static void main(String[] args) {
Car car = new Car();
DriveControl control = (DriveControl) car;
control.startEngine();
Repairable repairable = (Repairable) car;
repairable.repair();
}
}
運行結果:
Car init
Start engine
Car is repaired
附上一圖,希望能夠幫上你的忙。
通過附圖,我們可以了解到?DY是接口,它被兩個子類實現(xiàn),分別是?softstudent,?softschool。其中?softschool?還自定義了一個方法名叫?print,參數(shù)便是DY接口,所以能夠對softstudent?進行輸出。
String?content?表示的是參數(shù)名叫content,它的類型是字符串,名字可以隨便換,但不能是JAVA關鍵字,比如?java,while,for等等。
new?是構造的意思的,一般類都有默認的構造器,用于實例化類。
最后想說的話:
1,?在JAVA世界,一般類名標準都要求單詞首字大寫,比如softschool?應該寫成?SoftSchool,這是業(yè)界內(nèi)默認的約定。
2,?左大括號不像.net那樣。
舉個例子給你參考:
public?class?SoftSchool?{
public?void?test(){
//...your?codes
}
}
public?class?Printer?{
public?static?void?main(String[]?args)?{
SoftSchool?softSchool?=?new?SoftSchool();
softSchool.test();
}
}
在java中,接口被看作是一種特殊的類。但是不能用new操作符創(chuàng)建接口的實例
它可以用來解決不是繼承于同一個父類的兩個類的多態(tài)實現(xiàn)。
public interface eatable
{
public void howToEat();
}
public class apple implements eatable
{
public void howToEat()
{
System.out.println("eat directly");
}
}
public class pig implements eatable
{
public void howToEat()
{
system.out.println("cooked to eat");
}
}
然后我們可以直接定義一個
eatable 的變量
例如eatable a = new apple()
a.howToEat();
a = new pig();
a.howToEat();
你就可以看到好處了
------------------------------------------------------------
新浪微博:java_learner
給你不一樣的java資料更新