天天看點

java接口與内部類

      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();
        }
    }
           

為什麼要使用内部類?

       典型的情況是,内部類繼承自某個類或實作某個接口,内部類的代碼操作建立其他外圍類的對象。是以你可以認為内部類提供了某種進入其外圍類的視窗。使用内部類最吸引人的原因是:每個内部類都能獨立地繼承自一個(接口的)實作,是以無論外圍類是否已經繼承了某個(接口的)實作,對于内部類都沒有影響。如果沒有内部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與程式設計問題就很難解決。從這個角度看,内部類使得多重繼承的解決方案變得完整。接口解決了部分問題,而内部類有效地實作了“多重繼承”。