【我的Java知识储备——内部类(第一份博客,有优化意见的请评论)】

【我的Java知识储备——内部类(第一份博客,有优化意见的请评论)】,第1张

1、内部类概述

内部类是在一个类中定义另一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类。

内部类的定义格式:

内部类格式:
        public class 类名(){
                修饰符 class 类名(){
                }
        }

内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有成员变量;
外部类必须通过创建对象来访问内部类;

public class Outer {
    private int num=10;
   //内部类
    public class Inner {
         public void show(){
                System.out.println(num);
         }
    }
    //在方法内通过创建对象来访问内部类
    public void  method(){
        Inner i=new Inner();
        i.show();
    }
}
2、成员内部类

在类的成员位置:成员内部类
创建对象的格式:外部类名.内部类名 对象名=new 外部类名().new 内部类名();

public class Outer {
    private int num=11;
    /*//公共成员内部类
    public  class Inner{
        public void show(){
            System.out.println(num);
        }
    }*/

    //私有类不能被别的类调用
    private  class Inner {
        public void show() {
            System.out.println(num);
        }
    }
    //在外部类中可以调用私有内部类
    public void method(){
        Inner i=new Inner();
        i.show();
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        //创建内部类对象,并调用方法
//        Outer.Inner i= new Outer().new Inner();
//        i.show();

        Outer o=new Outer();
        o.method();
    }
}
3、局部内部类

在类的局部位置:局部内部类

  • 局部内部类是在方法中定义的类,所以外界是无法直接使用的,需在方法内创建对象并使用
  • 该类可以直接访问外部类成员,也可以访问方法内的局部变量

public class Outer {
    private int num=111;
    public void method(){
        int num1=22;
        //局部内部类,
        class Inner{
          public void show(){
              System.out.println(num);
              System.out.println(num1);
          }
        }
        Inner i=new Inner();
        i.show();
    }

3.1、匿名内部类

匿名内部类:
前提:
存在一个类或接口;这里的类可以是具体类也可以是抽象类
格式:

  •           new 类名或接口名(){
                    重写方法;
              };
    

本质是一个继承了该类或者实现了该接口的子类匿名对象。

public interface Interface {
    void show();
}

public class Outer {
    public void method(){
        /*new Interface(){
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        };*/
//        show();

        //多次调用
        Interface i=new Interface(){
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        };
        i.show();
        i.show();
        i.show();
        i.show();
    }

}
public class Test {
    public static void main(String[] args) {
        Outer o=new Outer();
        o.method();
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/725535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存