亚洲福利网站,国产精品久久国产三级国电话系列 ,欧美久久久久久,蜜桃av在线

IT培訓(xùn)-高端面授IT培訓(xùn)機(jī)構(gòu)
云和教育:云和數(shù)據(jù)集團(tuán)高端IT職業(yè)教育品牌
  • 國家級
    全民數(shù)字素養(yǎng)與技能培訓(xùn)基地
  • 河南省
    第一批產(chǎn)教融合型企業(yè)建設(shè)培育單位
  • 鄭州市
    數(shù)字技能人才(碼農(nóng))培養(yǎng)評價聯(lián)盟
當(dāng)前位置:
首頁新聞資訊IT資訊正文

JAVA大咖分享:深入剖析JAVA內(nèi)部類

  • 發(fā)布時間:
    2020-08-20
  • 版權(quán)所有:
    云和教育
  • 分享:
什么是內(nèi)部類?
概念:定義在類中的類
怎么用的?
就像在類中定義屬性一樣修飾符 class 類名{}第一:內(nèi)部類相當(dāng)于是外部類中的一個屬性第二:內(nèi)部類本身也就是一個類,跟正常的類一樣
為什么要用它?
類的生命周期程序運(yùn)行時開始到程序結(jié)束時銷毀,但是呢,某些情況下,在整個應(yīng)用程序中對該類的使用頻率較低,那此時就需要將其定義為內(nèi)部類,以縮短其生命周期;簡單點來說:縮短類的生命周期劃分:內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類使用場景:當(dāng)類或該類的對象并不是很常用的時候,就可以定義為內(nèi)部類
內(nèi)部類
java
public class Outer {public int count;//內(nèi)部類也相當(dāng)于是外部類中的一個成員變量
class Inner{
public int count;
public void show() {
System.out.println("inner show");
}
}
}
//思路:1、把內(nèi)部類當(dāng)成是外部類中的一個成員,那么想要找到內(nèi)部類就需要有外部類的對象
//2、show方法需要對象進(jìn)行調(diào)用的,而內(nèi)部類的對象又需要外部類的對象進(jìn)行調(diào)用
//3、外部類.內(nèi)部類 變量名 = 外部類對象.內(nèi)部類對象
//4、Outer.Inner inner = new Outer().new Inner();
public static void main(String[] args) {
Outer outer = new Outer();
System.out.println(outer.count);
//創(chuàng)建內(nèi)部類對象
Outer.Inner inner = outer.new Inner();
inner.show();
}
?
內(nèi)部類和不同的修飾同時存在時的特點:

java
public class Outer {//對于該成員變量,其生命周期和對象的生命周期一致,作用域在整個類中都可以使用,調(diào)用形式:使用對象調(diào)用
//可用的修飾符:public private protected static final
private int count;//private修飾后,該類就只能在當(dāng)前類中使用
//static修飾后,該類的生命周期和外部類的生命周期一致,就失去了內(nèi)部類本身的意義
//final修飾后,該類無法被繼承
class Inner{
private int count;
public void show() {
System.out.println("inner show");
}
}
}
//調(diào)用
Outer.Inner inner = new Outer.Inner();
inner.show();
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.show();
?
注意:內(nèi)部類可以調(diào)用外部類的屬性和方法,但是外部類只能通過對象的形式去調(diào)用內(nèi)部類中的屬性和方法。

java
//在內(nèi)部類中區(qū)分this關(guān)鍵詞的所屬
public class Outer {
private int count = 6;
//內(nèi)部類也相當(dāng)于是外部類中的一個成員變量
class Inner{
public int count = 5;
public int num;
public void show() {
int count = 4;
System.out.println("inner show "+ Outer.this.count);
}
}
public void method() {
Inner inner = new Inner();
inner.show();
}
}

局部內(nèi)部類:定義在方法中的類,生命周期和方法的生命周期一致,作用域只在方法中
java
public class Outer2 {
/**
* jdk1.8中內(nèi)部類所在的方法中的參數(shù)默認(rèn)是final修飾的
* jdk1.7及之前需要明確標(biāo)出final
* @param count
*/
public void method(int count) {
int a = 1;
//count++;
class Inner{
public void show() {
System.out.println("show "+count);
}
}
new Inner().show();
}
public static void main(String[] args) {
Outer2 outer = new Outer2();
outer.method(1);
}
}
匿名內(nèi)部類:沒有具體的子類名字
例如:User user = new User();? ?new User(); 有名字的話可以多次使用
概念:沒有名字的內(nèi)部類,沒名字說明不經(jīng)常用,內(nèi)部類作用是為了縮短生命周期
例如:老王家生了個孩子起名叫小王,過段時間他老婆又懷了一個,叫老王家的孩子,他是沒有名字,所以只能通過其父親的名字來區(qū)別,因此,匿名內(nèi)部類必須要有繼承或?qū)崿F(xiàn);
語法:父類類名 名字 = new 父類類型(){};
注意:new 父類類型(){}相當(dāng)于就是一個子類對象
學(xué)習(xí)時只需要記住三個點:
1、記住語法
2、new 父類類型(){}相當(dāng)于就是一個子類對象,只是沒有名字
3、父類類名 名字 = new 父類類型(){};是多態(tài)形式,向上轉(zhuǎn)型
java
public interface ItemDao{
public int delUser(int uid);
}
public static void main(String[] args){
new ItemDao(){
@Override
public int delUser(int uid){}
}.delUser(1);
}
//上述形式,相當(dāng)于創(chuàng)建了一個子類去實現(xiàn)了ItemDao接口并重寫方法
public class ItemDaoImpl implements ItemDao{
@Override
public int delUser(int uid){}
}
//單獨創(chuàng)建一個類去實現(xiàn)接口和使用匿名內(nèi)部類實現(xiàn)接口的區(qū)別是:使用匿名內(nèi)部類可節(jié)約資源-生命周期短
?
思考:根據(jù)上述匿名內(nèi)部類的調(diào)用形式上發(fā)現(xiàn)一個問題,如果其中重寫了多個方法時,如何調(diào)用?
回答:匿名內(nèi)部類可以使用其父類來進(jìn)行接收
java
public interface ItemDao{
public int delUser(int uid);
public int insertUser();
}
public static void main(String[] args){
ItemDao itemDao = new ItemDao(){
@Override
public int delUser(int uid){}
@Override
public int inserUser(){}
};
itemDao.delUser(1);
itemDao.inserUser();
}
思考:根據(jù)上述的使用方案,匿名內(nèi)部類本身也是一個類,那也可以有自己特有的方法,如何調(diào)用呢?
回答:當(dāng)子類有自己的特有方法時也就意味著該類應(yīng)該被定義成一個單獨的類存在
java
public interface ItemDao{
public int delUser(int uid);
public int insertUser();
}
public static void main(String[] args){
ItemDao itemDao = new ItemDao(){
@Override
public int delUser(int uid){}
@Override
public int inserUser(){}
public void show(){}
};
itemDao.delUser(1);
itemDao.inserUser();
//itemDao.show();
}
練習(xí)題:
java
public interface IUserDao{
public void speak();
}
public static void main(String[] args){
Object obj = new IUserDao(){
@Override
public void speak(){
Syso("speak");
};
};
obj.speak();
IUserDao userDao = new IUserDao(){
@Override
public void speak(){
Syso("speak");
};
};
userDao.speak();
}
文/云和數(shù)據(jù)java高級開發(fā)工程師代老師
主站蜘蛛池模板: 卓尼县| 福海县| 沅江市| 招远市| 扶余县| 南雄市| 三都| 肥城市| 柯坪县| 怀宁县| 吉林市| 青阳县| 西吉县| 阜新市| 天等县| 永安市| 蒲城县| 东海县| 乐昌市| 鸡泽县| 北安市| 嵊泗县| 荆门市| 谷城县| 苍溪县| 平果县| 天峨县| 阿荣旗| 宁安市| 商丘市| 瑞昌市| 高平市| 彰化市| 江津市| 溧阳市| 赤城县| 栾川县| 郧西县| 昌都县| 万山特区| 日土县|