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