OnJava8_内部类

2020-01-28  本文已影响0人  啊啊啊哼哼哼

一个定义在另一个类中的类,叫作内部类。

//第一种方法
class OutterClass{
    InnerClass returnInObject(){
        return new InnerClass();
    }
    public static void main (String[] args){
        OutterClass outObject = new OutterClass();
        OutterClass.InnerClass inObject = outObject.returnInObject();
    }
}
//第二种方法
class OutterClass{
    InnerClass {};
    public static void main (String[] args){
        OutterClass outObject = new OutterClass();
        OutterClass.InnerClass inObject = outObject.new InnerClass();
    }
}
}
public class DotThis {

    void f(){
        System.out.println("DotThis.f()");
    }
    public class Inner{
        public DotThis outer(){
            return DotThis.this;
        }
    }
    public Inner inner(){
        return new Inner();
    }
    public static void main(String []args){
        DotThis dt = new DotThis();
        DotThis.Inner dti = dt.inner();
        dti.outer().f();
        DotThis.Inner dtiNew = dt. new Inner();

    }
}
public class Parcel55 {
    public Destination destination(String s){
        final class PDestination implements Destination{
            private String label;
            @Override
            public String readLable() {
                return label;
            }
            private PDestination(String whereTo){
                label = whereTo;
            }
        }
        return new PDestination(s);
    }
    public static void main(String []args){
        Parcel55 p = new Parcel55();
        Destination d = p.destination("qinxiaoyu");
    }
}
package innerclasses;

public class Parcel6 {
    private void internalTracking(boolean b) {
        if (b) {
            class TrackingSlip {
                private String id;

                TrackingSlip(String s) {
                    id = s;
                }

                String getSlip() {
                    return id;
                }
            }
            TrackingSlip ts = new TrackingSlip("slip");
            String s = ts.getSlip();
        }
    }

    public void track() {
        internalTracking(true);
    }

    public static void main(String[] args) {
        Parcel6 p = new Parcel6();
        p.track();
    }
}

嵌套类

普通的内部类对象隐式的保存了一个指向创建它的外围类对象的引用。而声明为static的内部类,即嵌套内部类,具有以下特性:

接口内部的类

所以想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所共用,可以使用接口内部类还可以使用default和static方法。

public interface ClassInInterface {
    void howdy();

    class Test implements ClassInInterface {

        @Override
        public void howdy() {
            System.out.println("Howdy!");
        }

        public static void main(String[] args) {
            new Test().howdy();
        }
    }
}

内部类的优势:
1、每个内部类继承一个类或者实现一个接口,内部类将实现进行封装,利于低耦合。
2、内部类可以访问外围类的任意成员。
3、多个内部类可以继承同一类或实现同一接口,不同内部类执行不同动作。

上一篇 下一篇

猜你喜欢

热点阅读