Java内部类手机专卖店_JAVA——内部类的那些事儿

obj3.func();

//3.2 访问静态内部类的静态方法(通过类名访问)

Outer.StaInner.staFunc();

//4 局部内部类访问局部变量

Outer obj4 = new Outer();

obj4.local();

//5 匿名内部类

Outer obj5 = new Outer();

obj5.anonymous();

//6 匿名内部类作为参数

asPara(new AbstractClass() {

public void func() {

System.out.println(匿名内部类作为参数);

}

});

}

public static void asPara(AbstractClass ac) {

ac.func();

}

}

//抽象类:作为匿名内部类存在的前提(前提:存在一个类(具体类或者抽象类)或者接口)

abstract class AbstractClass{

public abstract void func();

}

//外部类

class Outer{

private String hello = 内部类可以访问外部类数据成员(包括私有成员);

//内部类------------------------------

class Inner{

public void func() {

//内部类获取了外部类的引用Outer.this

System.out.println(Outer.this.hello);

System.out.println(hello);

}

}

//内部类私有---------------------------

private class PriInner{

public void func() {

System.out.println(内部类私有,外部类提供public方法访问);

}

}

//外部类提供public方法访问

public void providePublicFunc() {

PriInner pi = new PriInner();

pi.func();

}

//静态内部类--------------------------

static class StaInner{

//非静态方法

public void func() {

System.out.println(静态内部类的非静态方法);

}

//静态方法

public static void staFunc() {

System.out.println(静态内部类的静态方法);

}

}

//局部内部类---------------------------

//外部类中的成员方法local()

public void local() {

final String str = 局部内部类访问局部变量;

class LocInner{

public void func() {

//访问的局部变量要用final修饰,但jdk1.8不用

System.out.println(str);

}

}

//局部内部类只能在方法中访问

LocInner li = new LocInner();

li.func();

}

/*匿名内部类(是一个内部类) 前提:存在一个类(具体类或者抽象类)或者接口

* 本质:继承了该类或者实现该接口的一个子类匿名对象

* */

//外部类中的成员方法anonymous()

public void anonymous(){

new AbstractClass() {

public void func() {

System.out.println(重写抽象类中func()抽象方法);

}

}.func();

/*

相当于一个继承了AbstractClass的子类的一个对象obj,然后,obj.func();

思考1:若AbstractClass中还有一个抽象方法func1(),怎么调用?

方法:

AbstractClass ac = new AbstractClass() {

public void func() {

System.out.println(重写抽象类中func()抽象方法);

}

public void func1(){

System.out.println(重写抽象类中func1()抽象方法);

}

}

ac.func();

ac.func();

思考2:若匿名内部类中有自己定义的方法myFunc(),how?

思路:向下强转?but子类的类名是什么?

所以,匿名内部类针对一个方法比较好

* */

}

}

运行结果:

47a919785f9b9d9bce2139764a6c38c8.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值