柚子快報(bào)激活碼778899分享:【Java基礎(chǔ)】匿名內(nèi)部類
柚子快報(bào)激活碼778899分享:【Java基礎(chǔ)】匿名內(nèi)部類
?專欄【Java基礎(chǔ)】
?喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。
?音樂分享【The?truth?that?you?leave】
大一同學(xué)小吉,歡迎并且感謝大家指出我的問題殺
目錄
?什么是匿名內(nèi)部類
?為什么要使用匿名內(nèi)部類
?詳細(xì)解釋
????不使用匿名內(nèi)部類
????使用匿名內(nèi)部類
?書寫匿名內(nèi)部類的格式
?方法一
?方法二?
?匿名內(nèi)部類的應(yīng)用例子
?題目1
?方法一
?方法二?
??題目2
?什么是匿名內(nèi)部類
匿名內(nèi)部類是 Java 編程語言中一種特殊的類,它沒有顯式地定義類名,而是在創(chuàng)建對象時通過傳遞實(shí)現(xiàn)了某個接口或繼承了某個類的代碼塊來定義類。通常,我們使用它來簡化代碼、減少類的數(shù)量和更高效地編寫事件處理程序等。
?為什么要使用匿名內(nèi)部類
在實(shí)際開發(fā)中,我們常常遇到這樣的情況:一個接口/類的方法的某個實(shí)現(xiàn)方式在程序中只會執(zhí)行一次,但為了使用它,我們需要創(chuàng)建它的實(shí)現(xiàn)類/子類去實(shí)現(xiàn)/重寫。此時可以使用匿名內(nèi)部類的方式,可以無需創(chuàng)建新的類,減少代碼。
?詳細(xì)解釋
????不使用匿名內(nèi)部類
比如下面的代碼,定義了一個接口,接口里面有一個show方法
public interface Interface01 {
void show();
}
?為了使用該接口的show方法,我們需要去創(chuàng)建一個實(shí)現(xiàn)類,同時書寫show方法的具體實(shí)現(xiàn)方式
public class Interface01Impl implements Interface01{
@Override
public void show() {
System.out.println("奮斗5天,期末考試我要過Java");
}
}
在上面的代碼中,實(shí)現(xiàn)類Interface01全程只使用一次,為了這一次的使用要去創(chuàng)建一個類,未免太過麻煩。那么我們可以使用匿名內(nèi)部類。
????使用匿名內(nèi)部類
public static void main(String[] args) {
Interface01 interface01 = new Interface01() {
@Override
public void show() {
System.out.println("奮斗5天,期末考試我要過Java");
}
};
//調(diào)用接口方法
interface01.show();
}
?書寫匿名內(nèi)部類的格式
?方法一
這種方法和之前的多態(tài)基本上沒有區(qū)別
new 接口/類名(參數(shù)1, 參數(shù)2...){
實(shí)現(xiàn)方法1(){
}
實(shí)現(xiàn)方法2(){
}
......
};
?方法二?
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("奮斗5天,期末考試我要過Java");
}
}).start();
?匿名內(nèi)部類的應(yīng)用例子
?題目1
????????在程序的show()方法里面定義Father類的匿名子類,重寫Father類的method()方法,并在合適的位置調(diào)用method()方法
?方法一
abstract class Father {
int num;
public Father(int num) {
this.num = num;
}
public abstract void method();
}
class Niming {
public void show() {
Father father = new Father(10) { // 定義 Father 類的匿名子類
@Override
public void method() { // 重寫 Father 類的 method() 方法
System.out.println("Father 類的匿名子類重寫了 method() 方法");
System.out.println("num 的值為:" + num);
}
};
father.method(); // 在合適的位置調(diào)用 method() 方法
}
}
public class InnerClasssDemo5 {
public static void main(String[] args) {
Niming niming = new Niming();
niming.show();
}
}
運(yùn)行結(jié)果
Father 類的匿名子類重寫了 method() 方法 num 的值為:10
?方法二?
interface InterFace1 {
int num = 100;
void method();
}
class Niming2 {
public void show() {
InterFace1 interFace1 = new InterFace1() { // 定義實(shí)現(xiàn)了 InterFace1 接口的匿名內(nèi)部類
@Override
public void method() { // 重寫 InterFace1 接口中的 method() 方法
System.out.println("InterFace1 接口的匿名內(nèi)部類重寫了 method() 方法");
System.out.println("num 的值為:" + num);
}
};
interFace1.method(); // 在合適的位置調(diào)用 method() 方法
}
}
public class InnerClassDemo6 {
public static void main(String[] args) {
Niming2 niming2 = new Niming2();
niming2.show();
}
}
?運(yùn)行結(jié)果
InterFace1 接口的匿名內(nèi)部類重寫了 method() 方法 num 的值為:100
??題目2
????????在InnnerClassDemo7類的main()方法中使用PersonDemo類的pd對象調(diào)用method(Person p)方法,向person接口變量p傳遞一個匿名子類對象,重寫Person接口的study()方法,
package cn.num07;
interface Person {
void study();
}
class PersonDemo {
public void method(Person p) {
p.study();
}
}
public class InnerClassDemo7 {
public static void main(String[] args) {
PersonDemo pd = new PersonDemo();
pd.method(new Person() { // 向 person 接口變量 p 傳遞一個匿名子類對象
@Override
public void study() { // 重寫 Person 接口的 study() 方法
System.out.println("我正在學(xué)習(xí)Java編程語言");
}
});
}
}
運(yùn)行結(jié)果
我正在學(xué)習(xí)Java編程語言?
?
?殺如果大家有不明白的地方,或者文章有問題,歡迎大家在評論區(qū)討論,指正殺
柚子快報(bào)激活碼778899分享:【Java基礎(chǔ)】匿名內(nèi)部類
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。