• 内部类和匿名内部类


    一、内部类

    内部类的访问规则:

      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 }
  • 相关阅读:
    jquery更改输入框type为密码框password
    用table做网页,设置了border为1px怎么还是觉得很粗?
    键盘按钮keyCode大全
    兼容firefox的 keyCode
    php生成随机字符串和验证码的类
    asp.net多图片上传实现程序代码
    asp.net图片上传实例
    纯js分页代码(简洁实用)
    jQuery中读取json文件示例代码
    perl编程中的map函数示例
  • 原文地址:https://www.cnblogs.com/dafa4java/p/3249062.html
Copyright © 2020-2023  润新知