1、成员内部类

1、成员内部类

成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类

1、成员内部类

可以访问外部类的所有资源、本身内部不能有静态属性(本身就需要外部类的实例化)

通过类.this.变量名。调用外部类相同的方法或者属性

ExternalClass.this.a

创建成员内部类实例时,外部类的实例必须已经存在。

ExternalClass externalClass = new ExternalClass();

InnerClass innerClass = externalClass.new InnerClass();//创建内部类对象

package com.zheng.demo10;

public class ExternalClass {

String name = "hello";

private int a = 666;

public void displayExternal() {

System.out.println("我是外部类");

}

//内部类

class InnerClass {

private int a= 888;

public void didplayInner() {

System.out.println("我是内部类");

}

//调用外部类的私有属性

public void show() {

System.out.println("我拿了内部类的私有属性:"+a);

System.out.println("我拿了外部类的私有属性:" + ExternalClass.this.a);

}

//调用外部类的方法

public void show1() {

displayExternal();

}

}

public static void main(String[] args) {

ExternalClass externalClass = new ExternalClass();

InnerClass innerClass = externalClass.new InnerClass();//创建内部类对象

innerClass.didplayInner();

innerClass.show();

innerClass.show1();

}

}

2、静态内部类

用static定义

只能访问外部类的静态资源

不依赖外部类生成对象

通过类.属性名调用外部属性

InnerClass innerClass = new InnerClass();//创建内部类对象

package com.zheng.demo10;

public class ExternalClass {

String name = "hello";

private static int a = 666;

public static void displayExternal() {

System.out.println("我是外部类");

}

//内部类

public static class InnerClass {

private static int a=9999;

public void didplayInner() {

System.out.println("我是静态内部类");

}

//调用外部类的私有属性

public void show() {

System.out.println("拿了静态内部类的私有熟属性:"+a);

System.out.println("我拿了外部类的静态私有属性:" +ExternalClass.a);

}

//调用外部类的方法

public void show1() {

displayExternal();

}

}

public static void main(String[] args) {

InnerClass innerClass = new InnerClass();//创建内部类对象

innerClass.didplayInner();

innerClass.show();

innerClass.show1();

}

}

3、局部内部类

定义在外部类的方法中的类,只在该方法内有用

不能使用访问控制符(publuc 、protected、default、private)

不能用static修饰

package com.zheng.demo10;

public class ExternalClass {

String name = "hello";

private int a = 666;

public void display() {

class InnerClass {//局部内部类

double b = 520.1314;

public void show() {

System.out.println("访问外部属性:" + a);

System.out.println("访问内部属性:" + b);

}

}

//在方法体内使用

InnerClass innerClass = new InnerClass();

innerClass.show();

}

public static void main(String[] args) {

ExternalClass externalClass = new ExternalClass();

externalClass.display();

}

}

4、匿名内部类

形式为:new <类或接口> <类的主体>

在匿名内部编写的方法对外不可见。没有自身的对象调用。通过继承一个接口实例化的对象不能调用子类独有的方法。

没有构造器

不能有访问修饰符合static修饰符

实现过程:1、继承一个接口。2、重写接口方法

package com.zheng.demo10;

public class ExternalClass {

public static void main(String[] args) {

A a = new A() {

public void show() {

System.out.println("我是匿名内部类");

}

};

a.show();

}

}

interface A {

public void show();

}

相关推荐

ff14坐骑图鉴2023
365bet体育投注官网

ff14坐骑图鉴2023

📅 10-12 👁️ 9493
王者直播平台哪个好用?(王者直播哪个平台比较好)
365国际彩票下载

王者直播平台哪个好用?(王者直播哪个平台比较好)

📅 09-14 👁️ 4780
皇子fnatic皮肤 LOL皇子fnatic皮肤怎么样
365国际彩票下载

皇子fnatic皮肤 LOL皇子fnatic皮肤怎么样

📅 08-10 👁️ 3321