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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Java内部类手机专卖店_Java(20)内部类

發布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java内部类手机专卖店_Java(20)内部类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內部類

一個定義在另一個類里面的類稱為內部類。內部類可以分為四種形式:成員內部類,

成員內部類

內部調用外部的屬性和方法

成員內部類可以無條件訪問外部類的所有成員屬性和方法。

其他類(例子中的RunC類)訪問一個內部類的形式有三種:

Outter.Inner outin=new Outter().new Inner();

Outter out=new Outter();

Outter.Inner in=out.new Inner();

public Inner getInnerInstance(){return Inner};

Outter out=new Outter();

Outter.Inner in=out.getInnerInstance();

public class Outter {

private String name = "Krystal";

private int age = 20;

private Inner innerInit=null;

public void outterFun(){

System.out.println("外部類的方法");

}

public Inner getInnerInstance(){

if(innerInit==null){

innerInit=new Inner();

return innerInit;

}else{

return innerInit;

}

}

class Inner {

void fun() {

//內部類無條件訪問外部類的所有成員屬性和方法,不需要聲明

outterFun();

System.out.println(name);

System.out.println(age);

}

}

}

class RunC {

public static void main(String[] args) {

//第一種方式:

Outter.Inner outin=new Outter().new Inner();

outin.fun();

// //第二種方式:

// Outter out=new Outter();

// Outter.Inner in=out.new Inner();

// in.fun();

// //第三種方式:

// Outter out=new Outter();

// Outter.Inner in=out.getInnerInstance();

// in.fun();

}

}

/*運行結果為:

外部類的方法

Krystal

20

*/

外部調用內部的屬性和方法

成員內部類可以無條件訪問外部類的所有成員屬性和方法,但是外部想訪問內部就沒那么簡單了。首先要創建一個成員內部類的對象,然后通過該對象訪問。

其他類(例子中的RunC類)訪問一個外部類的方式跟平時一樣,正常調用即可。

public class Outter {

Inner in=new Inner();

void outterFun(){

System.out.println(in.salary);

in.innerFun();

}

class Inner {

public void innerFun() {

System.out.println("內部類的方法");

}

private long salary=25000;

}

}

class RunC {

public static void main(String[] args) {

Outter ot=new Outter();

ot.outterFun();

}

}

/*運行結果為:

25000

內部類的方法

*/

局部內部類

局部內部類是定義在一個方法內或者一個作用域內的類。局部內部類的訪問權限僅限于方法內或者作用域內。

class Outter{

private String name="krystal";

public void outterFun(){

class Woman{

int age=18;

}

//方法內定義的局部內部類的成員屬性和方法只能在該方法內使用

System.out.println(new Woman().age);

}

//Woman w=new Woman();--->編譯報錯

}

class RunC{

public static void main(String[] args) {

Outter out=new Outter();

out.outterFun();

}

}

//運行結果: 18

匿名內部類(常用)

首先來了解以下什么叫做匿名類,匿名類就是沒有名稱的類,匿名類的名稱由java的編譯器給出,格式形如:外部類名稱+$匿名類順序。

既然匿名類沒有名稱,沒有名稱就不能被其它地方引用,不能被實例化,所以匿名類只能用一次,也不能由構造器。

匿名類可以繼承父類的方法,也可以重寫父類的方法。

匿名類必須繼承一個父類或者實現一個接口。創建語法格式如下:

new 父類構造器(實參列表) | 實現接口()

{

//匿名內部類的類體部分

}

匿名類可以訪問外部類的成員屬性和方法,匿名類的類體不可以聲明static變量或static方法。

了解了匿名類之后,那么放在一個類內部的匿名類就是匿名內部類。

案例1:通過繼承實體類創建匿名內部類

class Outter{

public String name="krystal";

void show(){

System.out.println("我叫"+name);

}

}

class RunC{

public static void main(String[] args) {

//通過實體類創建匿名內部類,相當于創建一個該類的子對象

Outter out=new Outter(){

//匿名內部類可以重寫父類的方法:

@Override

void show() {

System.out.println("我叫Jimmy");

}

};

out.show();

//匿名內部類可以繼承父類的屬性和方法:

System.out.println(out.name);

//查看編譯器分配給匿名內部類的名稱

System.out.println(out.getClass());

}

}

/*運行結果為:

我叫Jimmy

krystal

class RunC$1

*/

案例2:通過實現接口創建匿名內部類

interface OutF{

public double getPrice();

public String getName();

}

class RunC{

public static void main(String[] args) {

OutF oF=new OutF() {

@Override

public double getPrice() {

return 153.45;

}

@Override

public String getName() {

return "shit";

}

};

System.out.println(oF.getName());

System.out.println(oF.getPrice());

System.out.println(oF.getClass());

}

}

/*運行結果為:

shit

153.45

class RunC$1

*/

靜態內部類

靜態內部類是定義在一個類內且加了static關鍵字的類。靜態內部類不能訪問外部類的非靜態成員變量和方法,因為外部類的非static成員必須通過具體的對象來訪問,如果靜態內部類可以訪問非static的外部類成員,就破壞了這一原則。

class staClass{

private String cls_id;

static class Innersta{

void fun(){

// System.out.println(cls_id);

// 報錯Non-static field 'cls_id' cannot be referenced from a static context

}

}

}

總結

以上是生活随笔為你收集整理的Java内部类手机专卖店_Java(20)内部类的全部內容,希望文章能夠幫你解決所遇到的問題。

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