java内部类

1、只有内部类可以是私有类,而常规类只可以具有包可见性,或公有可见性。

内部类访问权限修饰符可以为:public、protected、默认、private;(可以用哪些修饰符视具体内部类类型而定)

常规类访问权限修饰符只能为:public、默认。

2、除了静态内部类以外,其他内部类中声明的所有静态域都必须是final(即常量)。
解释:
我们希望一个静态域只有一个实例 ,不过对于每个外部对象,会分别有一个单独的内部类实例。如果这个域不是fianl,它可能是不唯一的。

demo:
把一个类声明为内部类,通常是因为它和外围类是有一定联系的。现在我们把手机声明为外围类,手机屏幕声明为内部类

public class MobilePhone {
      private String name;
      
      public void create(Screen screen) {
		...
		// 通过给定的手机屏做了一个手机
		...
      }
      
      // 内部类,只有内部类可以声明为私有
	  public class Screen {
	  //屏幕大小
	  public static final double size = 5.6;
     }
}

现在张三和李四都创建了一个手机。现在假设张三嫌屏幕太小。于是想通过MobilePhone.Screen.size = 10;修改下屏幕的大小。我们知道类的static属性是共享的,那么可想而知李四的屏幕也跟着“膨胀”了。这样会吓到别人滴。为了避免这种风险,对于“共享变量(static)”,一定要final。

3、除了静态内部类外,其他内部类不能有static方法;静态内部类中的静态方法也只能访问外围类的静态域和静态方法。

4、局部内部类:

—局部内部类不能用public、protected、private访问权限修饰符进行声明,它的作用域限定在声明这个局部类的块中;

—局部类不仅能访问包含他们的外部类(可以访问所有的静态和非静态域及方法),还可以访问局部变量,但是, 那些局部变量必须事实上为final。(jdk8以前必须显示声明为final, jdk8以后可以不显示声明为final)

5、匿名内部类:

—可以访问包含它的外部类的所有域和方法(静态的及非静态的);

—匿名内部类不能有构造器,取而代之的是,将构造器参数传递给超类构造器;特别地,若内部类是在实现接口,则不能有构造器参数。

6、静态内部类:

—一般用于内部类不需要访问外围类对象,而只是为了把一个类隐藏在另一个类的内部的情况下;

—若内部类对象是在静态方法中构造的,则只能使用静态内部类;

—静态内部类不能访问外围类对象,即不能访问外围类的非静态域和非静态方法,但可以访问外围类的静态域和静态方法;

—与常规内部类不同,静态内部类可以有静态域和静态方法;

—声明在接口中的内部类会自动成为static和public类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值