java接口是是一系列方法的聲明,是一些方法特征的集合,一個接口隻有方法的特征沒有方法的實作,是以這些方法可以在不同的地方被不同的類實作,而這些實作可以具有不同的行為(功能)。
接口實作和類繼承的規則不同,為了資料的安全,繼承時一個類隻有一個直接父類,也就是單繼承,但是一個類可以實作多個接口,接口彌補了類的不能多繼承缺點,繼承和接口的雙重設計既保持了類的資料安全也變相實作了多繼承。java采用關鍵字interface建立一個接口。接口就是告訴程式需要做什麼隻不過這些方法都沒實作,沒有函數體。首先還是來看幾個程式。
interface information
{
void setTeacherName(String schoolname);
void setCode(String code);
void setSexy(String sexy);
void setBirthday(String birthday);
void setFamilyAddress(String familyaddress);
String getTeacherName();
String getCode();
String getSexy();
String getBirthday();
String getFamilyAddress();
}
以上就是實作了一個接口,是關于老師的資訊接口,包括姓名、号碼、生日、位址、性别資訊。下面就隻需要去用教師類去實作接口就好了。使用關鍵字implements實作。繼續看下面代碼。
class teacher implements information
{
private String teachername;
private String teachercode;
private String teachersexy;
private String teacherbirthday;
private String familyaddress;
public void setname(String teachername)
{
this.teachername=teachername;
}
public void setcode(String teachercode)
{
this.teachercode=teachercode;
}
public void setsexy(String teachersexy)
{
this.teachersexy=teachersexy;
}
public void setbirthday(String teacherbirthday)
{
this.teacherbirthday=teacherbirthday;
}
public void setfamilyaddress(String familyaddress)
{
this.familyaddress=familyaddress;
}
public String getcode()
{
return teachercode;
}
public String getsexy()
{
return teachersexy;
}
public String getbirthday()
{
return teacherbirthday;
}
public String getfamilyaddress()
{
return familyaddress;
}
public String tostring()
{
String infor=" 教師姓名:"+teachername+" "+"教師工号:"+teachercode+" "+"性别:"+teachersexy+" "+"出生年月:"+teacherbirthday+" "+"家庭位址:"+familyaddress;
return infor;
}
}
上述程式段實作了老師資訊接口,并實作了接口裡面的方法體。之後需要做的工作就是在主運作方法裡面進行使用teacher類了。、information接口可以被不同的類進行實作,也可以是學生類,但是不管是哪一個類實作該接口,都需要實作該接口裡面的全部方法體。(子類是抽象類這種情況除外)。
一個類可以同時實作多個接口,一個接口也可以同時被多個類實作。接口之間也可以有繼承關系。
interface schooInfor
{
void setschoolname(String schoolname);
void setclassname(String schoolclassname);
String getschoolname();
String getclassname();
}
interface schooInforAdd extends schooInfor
{
void setname(String name);
void setcode(String code);
void setsexy(String sexy);
void setbirthday(String birthday);
void setfamilyaddress(String familyaddress);
String getname();
String getcode();
String getsexy();
String getbirthday();
String getfamilyaddress();
}
一個接口可以被多個類實作:
class student implements schooInfor
class teacher implements schooInfor
一個類實作多個接口
class teacher implements schoolinfor1,schoolinfor2
關于java内部類
java内部類分為: 成員内部類、靜态嵌套類、方法内部類、匿名内部類 。内部類仍然是一個獨立的類,在編譯之後内部類會被編譯成獨立的.class檔案,但是前面冠以外部類的類名和$符号 ;内部類不能用普通的方式通路。内部類是外部類的一個成員,是以内部類可以自由地通路外部類的成員變量,無論是否是private的 ;内部類聲明成靜态的,就不能随便的通路外部類的成員變量了,此時内部類隻能通路外部類的靜态成員變量 。(參考百度百科)
class Outer {
class Inner{}
}
編譯上述代碼會産生兩個檔案:Outer.class和Outer$Inner.class。
public class InnerClasses
{
private static String staticAttribute = "Outter class' static attribute";
private String instantiateAttribute = "Outter class' instantiate attribute";
public void instantiateMethod()
{
System.out.println("Outter class' intantiate method");
}
public static void staticMethod()
{
System.out.println("Outter class' static method");
}
public static class StaticInnerClass
{
public StaticInnerClass()
{
System.out.println("static Inner class");
}
public void access()
{
System.out.println(staticAttribute);
staticMethod();
}
}
為什麼要使用内部類?
典型的情況是,内部類繼承自某個類或實作某個接口,内部類的代碼操作建立其他外圍類的對象。是以你可以認為内部類提供了某種進入其外圍類的視窗。使用内部類最吸引人的原因是:每個内部類都能獨立地繼承自一個(接口的)實作,是以無論外圍類是否已經繼承了某個(接口的)實作,對于内部類都沒有影響。如果沒有内部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與程式設計問題就很難解決。從這個角度看,内部類使得多重繼承的解決方案變得完整。接口解決了部分問題,而内部類有效地實作了“多重繼承”。