• java内部类基础知识


      一、java内部类具体分四大类

            1、成员内部类

            2、静态内部类

            3、局部内部类

            4、匿名内部类

      1、成员内部类             :作为类的成员,存在于类中                                               

     1 //成员内部类可以调用外部类的所有成员,但只有在创建了外部类的对象后,才能调用外部的成员。
     2  public class Outter1 {
     3     static int a=1;
     4     int b=0;
     5     
     6     public static void test1(){
     7         System.out.println("外部类的静态方法");
     8     }
     9     
    10     public void test2(){
    11             System.out.println("外部类的非静态方法");
    12     }
    13 
    14     //
    15     class Inner{
    16         public void test(){
    17             System.out.println("在成员内部类的方法中");
    18         //调用外部类的静态方法
    19             test1();
    20             
    21         //调用外部类的非静态方法
    22             test2();
    23             System.out.println(a+b);//访问外部类的静态成员变量和非静态成员变量
    24         }
    25     }
    26     
    27     
    28     
    29     public static void main(String[] args) {
    30         //Inner in=new Inner();成员内部类的对象不能直接创建,会报错
    31         Outter1 out=new Outter1();//先创建外部类的对象
    32         Inner in=out.new Inner();//注意:!!成员内部类的对象必须通过外部类的对象创建
    33     }
    34 }

      2、静态内部类     :作为静态成员存在类中

    //静态内部类虽然是外部类的成员,但是在未创建外部类的对象的情况下,可以直接创建静态内部类的对象。静态内部类可以引用外部类的静态成员变量和静态方法,但不能引用外部类的普通成员。
     
     //静态内部类的测试程序
     public class Outter {
         static int a=1;
         int b=5;
         
         static void test(){
             System.out.println("外部类的静态方法");
         }
         
         static class Inner{
             public void test2(){
                 System.out.println("a的值为"+a);;//直接引用外部类的静态成员变量
                 test();//直接引用外部类的静态方法
                 //b++;        静态内部类中不允许访问外部非static属性
                 System.out.println("静态内部类的方法");
             }
         }
         
         static class Inner2{
             public static void test2(){
                 System.out.println("如果内部类中的方法为static方法,那么内部类也必须为静态的");
             }
         }
    
    
         
         public static void main(String[] args) {
             Inner in=new Inner();//静态内部类的对象可以直接创建,无需先创建外部类的对象
             in.test2();
         }
     }

    3、局部内部类   :存在某个方法的内部,作用域,方法内

    //局部内部类只能在方法内部中使用,一旦方法执行完毕,局部内部类就会从内存中删除。
      //必须注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。
    
    public class Outter2 {
        int a=10;
        public void test(){
            final int c=5;
    
              System.out.println("在外部类的方法中");
    
            class Inner{
                int b=20;
                void test1(){
                    System.out.println("局部内部类的方法中");
    
                    System.out.println(c);//注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。
                }
            }
            Inner inner=new Inner();
            inner.test1();
        }
    
        public static void main(String[] args) {
            Outter2 outter=new Outter2();
            outter.test();
        }
    }

    4、匿名内部类 : 匿名内部类的定义与对象的创建合并在一起,匿名内部类一般通过如下形式定义,并且在定义的同时进行对象的实例化。

      

      //new 类或者接口的名字(){
    
      //匿名内部类的主体,大括号中是匿名内部类的主体,这个主体就是类或者接口的实现,如果是类,那么匿名内部类是该类的子类,如果是接口,匿名内部类需要完成接口的实现。
    
    //}
    
    class Person{
        public void show(Message message){
            message.show();
        }
    }
    
    class Message{
        public void show(){
            System.out.println("在Message类中");
        }
    }
    
    public class Outter3 {
        public static void main(String[] args) {
            Person person=new Person();
                
            person.show(new Message(){  //这里创建了匿名内部类
                public void show(){
                    System.out.println("在匿名内部类中");
                }
            });
        }
    }
    内容
  • 相关阅读:
    android 75 新闻列表页面
    android 74 下载文本
    android 73 下载图片
    android 72 确定取消对话框,单选对话框,多选对话框
    android 71 ArrayAdapter和SimpleAdapter
    android 70 使用ListView把数据显示至屏幕
    maven如何将本地jar安装到本地仓库
    Centos6.7搭建ISCSI存储服务器
    解决maven打包编译出现File encoding has not been set问题
    MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
  • 原文地址:https://www.cnblogs.com/eyjdbk/p/10980741.html
Copyright © 2020-2023  润新知