內部類分爲三種:成員內部類,靜態內部類,方法內部類,匿名內部類。
成員內部類:成員內部類在類中相當於類的成員。(就相當於類內部的一個成員)
特點:成員內部類可以訪問外部類的所有成員,並且內部類可以在外部類中被new,並能夠訪問外部類的成員
注意:如果內部類被聲明爲私有的,外界將無法訪問。
例子:class Outer{
private int num=4; //定義內部類的成員變量
public void test(){
Inner inner=new Inner();
inner.show();
}
class Inner{
void show(){
System.out.println("num="+num);
}
}
}
public class Example{
public Static void main(String[] args){
Outer outer=new Outer();
outer.test();
}
}
如果想通過外部類去訪問內部類成員需要通過外部類的對象去創建內部類的對象
外部類的名稱.內部類的名稱 變量名=new外部類的名稱().new 內部類的名稱();
例:
public void mian {
public static void mian(String [] args){
Outer.Inter inter=new Outer().new Inter();
inner.show();
}
}
靜態內部類:
靜態內部類就是加 static 關鍵字的成員內部類,他可以在不創建外部類對象的情況下被實例化
語法格式:外部類名.內部類名 變量名=new 外部類名。內部類名();
特點:靜態內部類只能訪問外部類的靜動態數據成員
class persion{
public static int num=4;
static class Inner(){
void show(){
System.out.pringln("num="+num);
}
}
}
class Example18{
public static void mian(String [] args){
Outer.Inner inner=new Outer.Inner();
inner.show();
}
}
方法內部類: 方法內部類只能在當前方法中使用(是指寫在方法內部的)
class Outer{
private int num=4;
peivate void test(){
class Innter{
void show(){
System.out.println("num="+num);
}
}
Innter innter=new Innter();
innter.show();
}
}
public class Example(){
public ststic void main(String[] args){
Outer outer =new Outer();
outer.test();
}
}
匿名內部類:就是不直接寫類的名字,直接在方法的()寫出類的實現,方法相當於聲明。這就相當於對接口進行了實現
例:interface Animal{
void shout();
}
public class Example{
public static void mian(String [] args){
animalShout(new Animal(){
//實現shout的方法
public void shout(){
System.out.println("喵喵。。。。");
}
});
}
public static void animalShout(Animal an){
an.shout();
}
這大概就是對內部累的全部總結,如有不懂的歡迎大家留言