Java之内部类和匿名类

1.内部类

在之前的学习中,我们了解了关于类的很多知识,但是那个时候我们写的类都只包含变量和方法。其实在Java中类的内部是可以潜逃类的,这样的嵌套类就叫做内部类。很多外部类和内部类具有很多共性,这里就不再赘述,今天主要想写一写内部类区别于外部类的特征。

  • 内部类中也可以有静态方法和静态变量,但是这时就要求内部类本身必须是静态的;
  • 外部类不能访问内部类的实例域,但是内部类可以访问外部类的实例域和静态域,需要借助.this关键字;
  • 在公共类中可以实例化外部类,但是这时内部类不会被实例化;也可以单独实例化内部类
  • 单独实例化内部类要求外部类已经实例化,并且要借助.new关键字
  • 内部类之间可以相互实例化、调用。

下面的代码很好地展示了上述特性。

import static java.lang.System.out;
class outer{
private int data2;
public static int DAAD;
public outer() {
    this.data2 = 32;
}
private class in1{
    private int in1_data;
    public in1() {
        this.in1_data=12;
    }
    public int getIn1() {
        return in1_data;
    }
}
public class in2{
    private double in2_data;
    in2(double data2){
        this.in2_data = data2;
    }
    public void show2() {
        out.println("this is in2"+this.in2_data);
        out.println(new in3().getin2());
    }
    public int showout() {
        return outer.this.data2;
    }
}
public class in3 extends in1{
    //public static String A3 ="in3 static str"; ERROR
    public in3() {
        super();
    }
    public in2 getin2() {
        return new in2(33.2);
    }
}
public static class in4{
    public static double aa4=4.33;
    public static double getaa4() {
        return aa4;
    }
}
}
public class Innerclass {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    outer o1 = new outer();
    outer.in2 ii2 = o1.new in2(3.1412);
    ii2.show2();
    out.println("inner access outclass"+ii2.showout());
    out.println(outer.in4.getaa4());
}
}

2.匿名类

匿名类其实是对内部类的扩展……

作者按:在参考了无数的国内Java教材后,我还是选择了参考英文原版的<Thinking in Java>,与其看中文版作者语焉不详,不如坐下来仔细研读一下英文版教材。

本文作者:MyTech::Author

本文链接: https://mytech.pages.dev/2020/04/08/echo_139/