日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java学习第七天

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java学习第七天 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

內部類
?????? 在類的內部也可以定義另一個類


------------------------------------------------------------
//類嵌套類,類中帶有類
//內部類跟方法一樣,可以使用全部的訪問權限修飾符,用法是一樣的

接口 InterInner
public interface InterInner {
?public void method();
}


實現接口 InterInnerImpl

public class InterInnerImpl implements InterInner {

?@Override
?public void method() {
?}

}

?

普通類 ?Outer

public class Outer{
????? private int intField;

?????? //第一種:成員內部類,跟成員屬性(方法同級),可以類比成員屬性

?????? class Inner1{}???? //Innerl、Inner2、Inner3都是成員內部類
??????
?????? class Inner2{}

?????? class Inner3{}

????? //編譯后的表現格式:Outer$2Inner4.class
????? public void method1(){
???????? int a = 0;
????????? //第二種:局部內類
????? //跟局部變量同級,用法類別局部變量,不能使用修飾符

??????? class Inner4{}
????????????????????? //Inner4、Inner5都是局部內 類
??????? class Inner5{}
}
?????? //第三種: 靜態內部類? 可以類比? 靜態屬性
??????? static class Inner6{}

????? //第四種: 匿名內部類
?????? //因為InterInner interinner = new InterInner() 編譯不能通過
????? //抽象類 不能實例化
??? //所以
????? InterInner interinner = new InterInner(){

????? @Override
?????? public void? method(){}? };


??? public static void main(String[] args){
?????? //第一種:成員內部類? 創建 對象的 格式
?????? Outer outer = new Outer();
?????? Outer.Inner inner1 = outer.new Inner();
?????? Outer.Inner2 inner2 = new Outer().new Inner2();

?????? //第二種:局部內部類
????? //無法通過普通new進行創建,可以通過繼承/實現接口的方式進行


???? //第三種:靜態內部類
???? ?Outer.Inner5 inner5 = new Outer.Inner5();
????
???? //第四種:匿名內部類

???? InterInner interImp1 = new InterInnerImp1();
???
??? //匿名內部類創建對象方式:等價于 InterInner interImp1 = new InterInnerImp1();

?? //不一樣的地方是:沒有類名

?? //1、繼承某一個類
?? //2、實現某一個接口
????

}

}

----------------------------------------------------------------
普通類 InnerFather

public class InnerFather {

}


接口? InnerInterface

public interface InnerInterface {

}

?

普通類 MemberOuter

public class MemberOuter{
??? private int privateField = 1;
??? public static int staticField = 3;
??? public int a = 1;

? //內部類跟普通類是一樣的,普通類能干什么,內部類就可以干什么
? //比如:繼承? 實現接口
? //可以幫助外部類實現多繼承的功能
? //成員內部類運用場景:
? //1、通過內部類可以實現類的多繼承
? //2、如果外部類是一個 邏輯非常復雜的一個類,需要操作很多屬性
? //或方法 這個時候,可以對功能進行拆分讓某個或多個內部類,幫忙處理

?? class Inner extend InnerFather implements InnerInterface{

????? public Inner(){}

????? public int a=2;

/*Outer 對象 --》Inner 對象 --》內部成員

? 外部類 --》Inner 類 --》靜態成員
?? ?Inner 類 靜態成員 --》常量


?? 因為訪問成員內部類中屬性 需要通過外部類的對象,進行內部類對象的創建
然后通過內部類的對象進行訪問。如果 在內部類中聲明 靜態屬性 那么只能
通過內部類的 類名進行訪問 此時 如果內部類是成員內部類時 那么外部類
不能通過 外部類名.內部類名 訪問內部類靜態成員屬性 所以 要么把內部類變成
靜態內部類 要么把 靜態成員 屬性變成 常量(常量表達式)

?

//成員內部類中 不能定義靜態的屬性
public static final int innerStaticField = 1; //常量表達式
public static final String stringInnerStaticField = "aaa";


//同名屬性的情況下訪問
public void method(){
int a = 3;
//如果沒有特殊指定:this 或Outer.this
//那么訪問順序跟子類屬性訪問規則一致
//先局部(內部類) -- 成員(內部類) -- 外部
//就近原則

System.out.println("a:" + a);
System.out.println("a:" + this.a);
//內部類訪問外部類屬性的方法Outer.this.屬性
System.out.println("a:" + MemberOuter.this.a);
}
?
//外部類訪問控制
public void method2(){
//可以訪問外部類的私有屬性
System.out.println("outer 私有屬性" + privateField);
//可以訪問外部類的靜態屬性

System.out.println("outer 私有屬性" + staticField);
}

//普通方法
public void method(){
Inner inner = new Inner();
inner.method();
}

public static void method2(){

//外部類靜態方法中不能使用成員內部類,如果要調用 就把成員內部類定義成
靜態
//可以類比靜態方法調用非靜態屬性
//Inner inner = new Inner();
}

public static void main(String[] args){
MemberOuter.Inner inner = new MemberOuter().new Inner();
??//inner.method();
??//inner.method2();
??
??
??MemberOuter outer = new? MemberOuter();
??
??outer.method();
?}
?
}


-------------------------------------------------------------------
public class StaticOuter {
?
?private static int staticField = 1;
?public int intField = 2;
?
?static class Inner{
??public int innerField = 1;
??public static int? innerStaticField = 2;
??//可以定義非靜態方法
??//靜態內部類:
??//非靜態方法,可以訪問內部中靜態/非靜態成員,可以訪問外部類的靜態成員,無法訪問,外部類非靜態成員
??//原因:StaticOuter.Inner inner = new StaticOuter.Inner();
??//創建靜態內部類對象時候,沒有創建外部的對象,
??//此時,不是通過外部類對象訪問非靜態屬性,所以不能訪問
??public void method(){
???//非靜態方法中可以訪問外部類靜態屬性,但不能非靜態屬性
???//Cannot make a static reference to the non-static field intField
???///System.out.println("outer 非靜態屬性:" + intField);
???System.out.println("outer 靜態屬性:" + staticField);
???
???//可以訪問內部類定義的靜態屬性 ,也可以訪問非靜態屬性
???System.out.println("inner 靜態屬性:" + innerStaticField);
???System.out.println("inner 非靜態屬性:" + innerField);
??}
??
??//靜態方法
??//靜態內部類:
??//靜態方法只能訪問靜態屬性或方法,不能訪問非靜態方法或/屬性,不管是外部還是內類
??public static void? method2(){
???//Cannot make a static reference to the non-static field intField
???//System.out.println("outer 非靜態屬性:" + intField);
???System.out.println("outer 靜態屬性:" + staticField);
???//可以訪問內部類定義的靜態屬性 ,也可以訪問非靜態屬性
???System.out.println("inner 靜態屬性:" + innerStaticField);
???//Cannot make a static reference to the non-static field innerField
???//System.out.println("inner 非靜態屬性:" + innerField);
??}
?}
?public static void main(String[] args) {
??//成員內部類
??//MemberOuter.Inner inner = new MemberOuter().new Inner();
??//靜態內部類
??StaticOuter.Inner inner = new StaticOuter.Inner();
??inner.method();
??
??
?}
}
?

?

?

轉載于:https://my.oschina.net/u/2542711/blog/540714

總結

以上是生活随笔為你收集整理的java学习第七天的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。