最近看了一篇介绍Java内部类的文字,发现以前对内部类的理解还不完整,这里从新总结一下对java内部类的理解java
非静态内部类是指一个类嵌套了另一个类,被嵌套的这个类能够访问封闭类(outer class)的成员变量,所以一般也被称为inner classbash
咱们来看一个实例了解一下非静态内部类ui
public class Animal {
private String getType(int type) {
if (type == 1) {
return "birds ";
} else {
return "mammal";
}
}
class Chicken {
String weigth;
public int getPrice() {
return 1000;
}
public String getType() {
return Animal.this.getType(1);
}
}
class Panda {
String gender;
public String getFrom() {
return "ChengDu";
}
public String getType() {
return Animal.this.getType(2);
}
}
}
复制代码
以上代码建立了一个Animal类,Animal里面嵌套了Pig和Panda类,因此Pig和Panda属于Animal的内部类,而Animal相对于Pig和Panda类属于封闭类(也叫外部类),因此,在Pig和Panda能够调用Animal的成员变量以及成员方法,下面看一下内部类的调用this
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Animal.Chicken pig = animal.new Chicken();
System.out.println(pig.getPrice());
System.out.println(pig.getType());
Animal.Panda panda = animal.new Panda();
System.out.println(panda.getFrom());
System.out.println(panda.getType());
}
}
复制代码
注意,内部类实例化必需要先实例化外部类。spa
静态内部类是在内部类class前面用static声明code
接下来咱们了解一下静态内部类的建立get
public class Animal {
private String getType(int type) {
if (type == 1) {
return "birds ";
} else {
return "mammal";
}
}
static class Chicken {
String weigth;
public int getPrice() {
return 1000;
}
}
static class Panda {
String gender;
public String getFrom() {
return "ChengDu";
}
}
}
复制代码
静态内部类的实例方式与非静态内部类不一样,咱们来看一下string
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Animal.Chicken pig = new Animal.Chicken();
System.out.println(pig.getPrice());
Animal.Panda panda = new Animal.Panda();
System.out.println(panda.getFrom());
}
}
复制代码
注意,与非静态内部类不一样,静态内部类不能访问外部类的成员变量以及成员方法,由于静态内部类不须要建立外部类的实例it
以上就是被人对Java中的内部类的一点理解,若是又不对的或者不完善的,欢迎在留言指正。io