最近看了一篇介紹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