一、有名内部類
1、定義方法
如圖、在Example類中定義了一個Test類,此時Test稱為有名内部類(因為該内部類有其名字),Example為其外部類
2、作用
内部類可以定義在類中的任何位置:
一、當定義在成員變量的位置上:
此時該内部類可以使用權限修飾符:public~private
二、當定義在局部變量的位置上:
此時該類不可以使用修飾符修飾;
三、當類定義在含有局部變量的方法中:
在JDK.8以下的版本要在形參中添加final修飾
三、調用方法
在定義的非靜态有名内部類在靜态方法中使用時;必須得建立對象進行調用:
public class Example {
class Eat{//不可以直接在main方法中使用 必須建立對象
void sleep() {
}
}
public static void main(String[] args) {
Eat eat= new Example().new Eat();
}
可以看出想要必須建立Example對象才可以建立Eat對象
二、匿名内部類
1、定義方法
Example example =new Example() {
public void eat() {
System.out.println("正在吃東西");
}
};
此處定義的new Example();括号後面的部分相當于建立了一個子類(上轉型對象),其中可以對父類方法進行重寫而進行使用:
2、作用
一、定義在普通類
二、定義在抽象類
三、定義在接口類
3、使用方法
一、在定義抽象類的内部類時必須全部實作其抽象方法,否則不可建立對象;
二、可以在匿名内部類中添加新的屬性和方法,但是這些屬性和方法不能被上轉型對象所調用,隻能被非上轉型對象方式建立的匿名内部類對象所調用
public class Test {
public void eat() {
System.out.println("吃");
}
public static void main(String[] args) {
Test test= new Test() {
@Override
public void eat() {
System.out.println("喝");
}
int age=0;
}.age=11;
System.out.println(test.age);
}
此時的test的新定義的屬性是不可以被上轉型使用的、要是想要調用,就需要在建立的對象後面使用.新屬性
三、建立内部類時在Workplace
1、内部類建立新檔案
在建立内部類的時候,會在自己的eclipse的工作區中自定生成帶有$(dollar)檔案,匿名類使用的是1,2.3代替其類名: