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



阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页