静态内部类、非静态内部类、匿名内部类和局部类

静态内部类:

1.静态内部类是不需要依赖于外部类的

2.它不能使用外部类的非static成员变量或者方法(在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象

3.

非静态内部类:

1.成员内部类可以无条件访问外部类的所有成员属性和成员方法,包括private成员和静态成员。

2.当成员内部类拥有和外部类同名的成员变量或者方法时,外部类中的属性和方法会发生隐藏现象,即默认情况下访问的是成员内部类的成员,可以通过下面这种形式对外部类的属性和方法进行访问,外部类.this.成员变量,外部类.this.成员方法。

3.外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。

4.如果要创建成员内部类的对象,前提是必须存在一个外部类的对象

局部类:

1.局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。

class  People{
     public  People() {
         
     }
}
class  Man{
     public  Man(){
     }
     public  People getWoman(){
         class Woman extends People{   //局部内部类
            int age =0;
        }
         return  new  Woman();
     }
}

匿名类:

1.匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为Outter$1.class。

2.实现:

public class Test {

InterfaceA a = new InterfaceA() {};//成员匿名类

public static void main(String[] args){

InterfaceA a = new InterfaceA() {};//局部匿名类

//以上两种是通过实现接口实现匿名类,称为接口式匿名类,也可以通过继承类

Test test = new Test(){};//继承式匿名类

//还可以是位于参数上

new Thread(new Runnable() {

@Override

public void run() {

}}).start();//属于局部匿名类一种 }

private interface InterfaceA{}}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值