java局部内部类_Java基础学习:局部内部类,匿名内部类

局部内部类和匿名内部类的简单介绍,欢迎指正补充!

局部内部类

定义:如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。

局部内部类只有当前所属的方法才能使用它,出了这个方法就不可以使用。它和成员内部类的区别在于局部内部类的访问仅限于方法内。

需要注意的是,局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

局部内部类的语法修饰符 class 外部类名称 {

修饰符 返回值类型 外部类方法名称(参数列表) {

class 局部内部类名称 {

// ...

}

}

}

局部内部类的实例:package cn.oop.d1_inner;

/**

* @Author: yflad (bat@yflad.cn)

* @Blog: https://yflad.cn

* @Date: 2019-01-05

* @Role: 局部内部类

*/

public class D3_Local {

public void Stu() {

class Student { // 局部内部类

int age = 20;

public void Students() {

System.out.println(age); // 20

}

}

Student student = new Student(); // 创建一个对象来调用局部内部类里面的方法

student.Students();

}

}

实现类:package cn.oop.d1_inner;

/**

* @Author: yflad (bat@yflad.cn)

* @Blog: https://yflad.cn

* @Date: 2019-01-05

* @Role:

*/

public class D3_LocalTest {

public static void main(String[] args) {

D3_Local local = new D3_Local();

local.Stu();

}

}

输出结果:

1f3b0a7677a72f8b97fab32699a6111f.png

匿名内部类:

为什么要有匿名内部类?

如果在一段程序中需要创建一个类的对象(通常这个类需要实现某个接口或者继承某个类),而且对象创建后,这个类的价值也就不存在了,这个类可以不必命名,称之为匿名内部类

实现匿名内部类的前提条件

通常这个类需要实现某个接口或者继承某个类

匿名内部类的语法:new 父类名或者接口名() {

重写父类方法或者实现接口中的方法。

也可以自定义其他方法。

};

什么时候定义匿名内部类?

匿名内部类只是为了简化书写,匿名内部类有局限,通常定义匿名

内部类时,该类方法不超过3个

匿名内部类的好处和弊端:好处:

简化代码书写弊端:

1)不能直接调用自己的特有方法;2)不能执行强转换动作;3)如果该类里面方法较多,不允许使用匿名内部类

匿名内部类的实例:package cn.oop.d1_inner;

/**

* @Author: yflad (bat@yflad.cn)

* @Blog: https://yflad.cn

* @Date: 2019-01-06

* @Role: 匿名内部类

*/

public interface D4_Anonymity {

void Stu();

}

实现类:package cn.oop.d1_inner;

/**

* @Author: yflad (bat@yflad.cn)

* @Blog: https://yflad.cn

* @Date: 2019-01-06

* @Role:

*/

public class D4_AnonymityTest {

public static void main(String[] args) {

D4_Anonymity anonymity=new D4_Anonymity() {

@Override

public void Stu() {

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

}

};

anonymity.Stu();

}

}

运行结果:

6c9ad5cad87cdda627520e4c21075aea.png

小结:

类的权限修饰符:

64ddfa93cfb2d3030b38d1a872d1f539.png

由图可知:public > protected > 默认的(default) > private

定义一个类的时候,权限修饰符规则:外部类:public / default

成员内部类:public / protected / default / private

局部内部类:什么都不能写

匿名内部类:匿名内部类,是唯一一种没有构造器的类。

匿名内部类,不能有访问修饰符和static修饰符的。

匿名内部类,在创建对象的时候,只能使用唯一一次。如果希望多次创建对象,而且类的内容一样的话,那么就需要使用单独定义的实现类了。

匿名对象,在调用方法的时候,只能调用唯一一次。如果希望同一个对象,调用多次方法,那么必须给对象起个名字。

匿名内部类是省略了实现类/子类名称,但是匿名对象是省略了对象名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值