java程式設計之內部類
阿新 • • 發佈:2018-12-26
內部類的介紹
定義在另外一個類中的類,叫內部類
成員內部類
- .new 建立成員內部類必須先建立外部類的例項,然後通過.new 建立內部類的物件
- .this 可以通過外部類的類名.this去訪問外部類的所有屬性和方法。
public class Test1 {
String name = "asnd";
public static void main(String[] args) {
Test1 test1 = new Test1();
Inner mInner = test1.new Inner();
mInner.print();
}
void show() {
System.out.println("show");
}
public class Inner {
String name = "123";
private void print(){
show();
System.out.println(name);//列印的是123
System.out.println(Test1.this.name);//列印的是asnd
}
}
}
匿名內部類
沒有名字的類,建立類的同時,也會建立一個物件。
只需要用到一次的類,就可以使用匿名內部類
File file = new File("D:/cc.txt") {
@Override
public boolean delete() {
System.out.println("是否刪除y/n");
Scanner input = new Scanner(System.in);
String str = input.next();
if (str.equals("y")) {
return super.delete();
}
System.out.println("刪除失敗");
return false;
}
};
file.delete();
}
匿名物件
該物件只需要訪問一次.
new Thread() {
@Override
public void run() {
System.out.println("執行緒開始!");
try {
Thread.sleep(2000);
System.out.println("執行緒結束!");
} catch (Exception e) {
e.printStackTrace();
}
super.run();
}
}.start();
靜態內部類
- 靜態內部類只能訪問外部類靜態的方法和變數,不能訪問非靜態。
- 靜態內部類可以不需要建立外部類的引用,而直接建立。
匿名內部類訪問區域性變數
內部類訪問區域性變數必須final,如果沒有加,jdk1.8預設加上去了
當所使用的變數是在變的時候可以用下面的方法,也可以把下面的i在開始的時候定為靜態的
for (int i = 0; i < 5; i++) {
final int finali = i;
new Thread() {
public void run() {
System.out.println(finali);
};
}.start();
}
下面介紹一下內部類的實現技巧
public static void main(String[] args) {
Lam mLam = new Lam();
//第一種實現的方法
mLam.to(new Ligh() {
@Override
public void shin() {
System.out.println("on的第一種方法");
}
});
//第二種實現方法
class MyLam implements Ligh{
@Override
public void shin() {
System.out.println("第二種");
}}
mLam.to(new MyLam());
}
}
interface Ligh {
void shin();
}
class Lam {
public void to(Ligh ligh) {
ligh.shin();
System.out.println("on");
}
}