内部类的作用

  1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
  2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
  3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
  4. 内部类允许继承多个非接口类型(具体将在以后的内容进行讲解)
1.成员内部类

1.因为内部类相当于成员变量,所以内部类可以使用任意的访问修饰符

2.内部类可以直接访问外部类的所有属性和方法,反之则不行

3.内部类必须由外部类来创建

内部类 对象名 = 外部类对象.new 内部类();

注:成员内部类不能含有 static 的变量和方法,因为成员内部类需要先创建了外部类,才能创建它自己的。

2.静态内部类
public class StaticInnerClass {
    private static int ID=2020250131;
    public int Id=2020251163;
    static String name="chenhaixinag";
    /**
     * @author 陈海翔
     * 静态内部类不能访问外部类的非静态成员,但可以通过(new 外部类().成员)的方式访问
     */
    public static class Student{
        String name="KKword";
        public void Info(){
            System.out.println("访问外部类的同名静态成员"+StaticInnerClass.name);
            System.out.println("访问外部类的成员"+ID);
            System.out.println("访问内部类的静态成员"+name);
            System.out.println("访问外部类的非静态成员"+new StaticInnerClass().Id);
        }
    }
3.局部内部类
//在方法中定义局部内部类
public void Info(){
   final String name="chenhaixiang";
   class Student{
       final int Id=2020250134;
       public void print(){
           System.out.println("访问外部类的方法中的常量"+name);
           System.out.println("访问内部类中的方法中的常量"+Id);  }}
   Student a=new Student();
   a.print();
}
//在作用域中定义局部内部类
public void info(boolean a){
    if(a==true){
        final String name="chenhaixiang";
        class Student{
            final int Id=2020250134;
            public void print(){
                System.out.println("访问外部类的方法中的常量"+name);
                System.out.println("访问内部类中的方法中的常量"+Id);  }}
        Student c=new Student();//方法中的对象不能重名
        c.print();
    }
}
4.匿名内部类

当内部类所在的方法的形参需要在内部类里面使用时,该形参必须为 final.

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

匿名内部类是不能加访问修饰符

interface Inner {
    String getName();
}
public class Outer {
    public Inner getInner(final String name, String city) {
        return new Inner() {
            private String nameStr = name;
            @Override
            public String getName() {
                return nameStr;
            }
        };
    }
    public static void main(String[] args) {
        Outer outer = new Outer();
        Inner inner = outer.getInner("Inner", "NewYork");
        System.out.println(inner.getName());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值