zoukankan      html  css  js  c++  java
  • 内部类和匿名内部类

    一、内部类

    内部类的访问规则:

      1.内部类可以直接访问外部类中的成员包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式为     外部类名.this 

      2.外部类要访问内部类必须建立内部类对象。

     1 public class Out {
     2     private int num=4;
     3     class inner{
     4 //        int num=5;
     5         public void function(){
     6 //            int num=6;
     7             System.out.println("inner:"+num);//此处省略了   Out.this.num    所以能直接访问外部类中的成员
     8         }
     9     }
    10     
    11     public void method(){
    12         inner in=new inner();
    13         in.function();//外部类要访问内部类必须建立内部类对象。
    14     }
    15 }

    测试类

    public class InnerTest {
        public static void main(String[] args) {
            Out out=new Out();
            out.method();
        }
    }

     2.当内部类在成员位置上时,就可以被成员修饰符所修饰。

      比如,private:将内部类在外部类中进行封装。

         static:内部类就具备了static的特性。当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限性。

    注意当内部类中定义了静态成员该内部类必须是静态的。

      当外部类中的静态方法访问内部类时,内部类也必须是静态的。

    3.内部类定义在局部时

      1.不可以被成员修饰符所修饰

      2.可以直接访问外部类中的成员,因为还持有外部类中的引用但是不可以访问他所在的局部中的变量,只能访问被final修饰的局部变量。

     1 public class Out {
     2     private int num=4;
     3     public void method(){
     4         final int  num=6;//内部类定义在局部时只能访问被final修饰的局部变量。
     5         class inner{
     6             void show(){
     7                 System.out.println("num="+num);
     8             }
     9         }
    10         new inner().show();//建立内部类的对象调用内部类的方法。
    11     }
    12 }
    1 public class InnerTest {
    2     public static void main(String[] args) {
    3         new Out().method();
    4     }
    5 }

     二、匿名内部类

       1.匿名内部类其实就是内部类的简写格式。

       2.定义匿名内部类的前提:内部类必须是继承一个类或实现接口。

       3.匿名内部类的格式:   new 父类或者接口(){定义子类内容}

       4.其实匿名内部类就是一个匿名子类对象。

    public abstract class InnerDemo {
        abstract void show();
    }
     1 public class Out {
     2     int num = 5;
     3 
     4     public class Inner extends InnerDemo {
     5 
     6         @Override
     7         void show() {
     8             System.out.println("num=" + num);
     9 
    10         }
    11 
    12     }
    13 
    14     public void function() {
    15         new Out().new Inner().show();
    16 
    17     }
    18 }

    上面的内部类可以用匿名内部类的进行简写,如下

     1 public class Out {
     2     int num = 5;
     3 
     4     public void function() {
     5         new InnerDemo(){
     6             //覆写InnerDemo中的抽象方法
     7             @Override
     8             void show() {
     9                 System.out.println("num="+num);
    10                 
    11             }
    12             
    13         }.show();//InnerDemo类的匿名子类对象调用自己的show()方法
    14     }
    15 }
  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/dafa4java/p/3249062.html
Copyright © 2011-2022 走看看