1. 程式人生 > >Java基礎:內部類基礎

Java基礎:內部類基礎

首先是內部類的定義:

可以將一個類的定義放在另一個類的內部,這就是內部類。

public class Parcel1{
class Contents {
private int i=11;
public int value(){
return i;
}}
class Destination{
private String label;
Destination(String whereTo){
label=whereTo;
}
String readLabel(){
return label;
}
}
public void ship(String dest)
{
Contents c=new Contents();
Destination d=new Destination(dest);
System.out.println(d.readLable());
}
public static void main(String[] args)
{
Parcel1 p=new Parcel1();
p.ship("Tasmania");
}
}

上面就是一個很簡單的內部類的例子。

1.首先讓我們來看看Parcel1這個類的構成

包含兩個內部類:

Destination,Contents

一個返回值為void的ship方法

2.分析ship方法

public void ship(String dest)
{
Contents c=new Contents();
Destination d=new Destination(dest);
System.out.println(d.readLabel());
}

在這個方法中,分別建立了兩個內部類的例項。同時呼叫了Destination這個內部類的readLabel方法。

3.主函式

public static void main(String[] args)
{
Parcel1 p=new Parcel1();
p.ship("Tasmania");
}

當我們在ship()方法中使用內部類的時候,與使用普通的內部類並沒有什麼區別。

外部類同時也提供了一個方法,該方法可以返回一個指向內部類的引用

public class Parcel {
    class  Contents{
        private int i=11;
        public int value()
        {
            return i;
        }
    }
    class Destination{
        private String label;

        public Destination(String whereTo) {
            whereTo = label;
        }
        String readLabel(){
            return label;
        }
    }
    public Destination destination(String s)
    {
        return new Destination(s);
    }
    public Contents contents()
    {
        return new Contents();
    }
    public void ship(String dest)
    {
        Contents contents=contents();
        Destination destination=destination(dest);
        System.out.println(destination.readLabel());
    }

    public static void main(String[] args) {
        Parcel parcel=new Parcel();
        parcel.ship("Tasmania");
        Parcel.Contents c= parcel.contents();
        Parcel.Destination destination=parcel.destination("Borneo");
    }
}

Parcel類中新提供了兩個返回內部類引用的方法:Contents contents()和Destination destination()

同時在主函式中向我們展示瞭如何建立內部類,格式為 OuterClassName.InnerClassName