Java 四种内部类

目录
1.成员内部类
2.局部内部类
3.匿名内部类
4.静态内部类

内部类:将一个类定义在另一个类里面或者一个方法里面。具体可以分为以下几种:

一.成员内部类
成员内部类:成员内部类是最普通的内部类,它的定义为位于另一个类的内部
特点:
1.成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
2.外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。
3.如果内部类和外部类同名,默认访问内部类。要访问外部类,要用this。

//prviate修饰
public class km {
   private  int num=10;
   public class k
   {
        private void m()
        {
            System.out.println(num);
        }

   }
   public void x()
   {
       k i=new k();
       i.m();
   }
}
public class demo {
    public static void main(String[] args) {
        km h=new km();
        h.x();
    }
}

//public 修饰
public class km {
   private  int num=10;
   public class k
   {
        public void m()
        {
            System.out.println(num);
        }

   }
}
public class demo {
    public static void main(String[] args) {
     km.k h=new km().new k();
     h.m();
    }
}

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

public class km {
   private  int num=10;
 public  void f()
 {
     int num2=20;
     class k
     {
         public void show()
         {
             System.out.println(num2);
             System.out.println(num);
         }
     }
     k a=new k();
     a.show();
 }
}
public class demo {
    public static void main(String[] args) {
        km h=new km();
        h.f();
    }
}

三.匿名内部类
匿名内部类是局部内部类的一种特殊形式
存在于一个类和接口(这里的类可以是抽象也可以是具体的)
格式:(和局部的区别)
new 类名或者接口名()
{
重写方法;
};
本质:是继承该类或者实现该接口的子类匿名对象

public interface jum  {
    void show();
}
public class km {
   private  int num=10;
 public  void f()
 {
     int num2=20;
     法一:
    jum i=new jum()
    {
        @Override
        public void show() {
            System.out.println("nihao");
            System.out.println(num);
        }
    };
    i.show();
    法二:

 new jum()
    {
        @Override
        public void show() {
            System.out.println("nihao");
            System.out.println(num);
        }
    }.show();
 }
 
 public class demo {
    public static void main(String[] args) {
        km h=new km();
        h.f();
    }
}

在使用匿名内部类时,需要牢记以下几个原则。
1.内部类没有构造方法
2.匿名内部类不能定义静态成员,方法和类
3.匿名内部类不能是public protected private static
4.只能创建匿名内部类的一个实例
5.一个匿名内部类可以在new后面,这个匿名类必须继承一个父类或实现接口
6.因为匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效

4.静态内部类

静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值