zoukankan      html  css  js  c++  java
  • Java中内部类简介

    内部类

    分类

    1. 成员内部类

    2. 局部内部类

    3. 匿名内部类

    4. 静态内部类

    成员内部类

    常见形式:

     public class external(){
         public class inside(){
             //这是一个内部类
         }
     }

    特点:

    1. 解决java没有多继承问题(内部类继承一个父类,外部类继承一个父类,变相的多继承)

    2. 成员内部类可以直接使用外部类的属性、方法(包括私有的)

    3. 当外部要实例内部类时,注意内部类的访问修饰符

    4. 当外部类与内部类的属性名或者方法同名时,内部的属性方法通过this.调用,外部的属性方法通过外部类名.this.调用

    局部内部类

    常见形式:

     public class external(){
         public void method(){
             class local(){
                 //这是一个局部内部类
             }
         }
     }

    特点:

    1. 无访问修饰符

    2. 局部内部类或者匿名内部类。如果要使用外部类的局部变量(包括形参,全局变量不包括)

      那么这个局部变量必须是final修饰的,及为常量

      JDK1.8之前必须声明final,JDK1.8之后编译时自动添加final

      (方法调用完会销毁,而局部内部类不会马上销毁,这是,如果调用的不是常量会出现异议)

    3. 局部内部类也会生成.class文件

    静态内部类

    常见形式:

     public class external(){
         public static class inside(){
             //这是一个静态内部类
         }
     }

    特点:

    1. 不可访问外部类中非静态的属性方法

    2. 静态内部类在外部中无法实例化

    3. 调用:

      外部类调用:外部类名.内部类名.静态方法名()

      外部调用:外部类的对象.内部类名.静态方法名()

    4. 注意static与class的位置关系,如果书写为 class static会编译报错

    匿名内部类】

    常见形式:

     //Anonymous是一个抽象类 , abstract_method是Anonymous中的一个抽象方法
     public abstract class Anonymous(){
         public abstract void abstract_method();
     }
     //External是一个类 , method是External中的方法,参数的类型是anonymous
     public class External(){
         public void method(Anonymous anonymous){
             }
         }
     }
     //要生成一个实现abstract_method方法的匿名内部类
     public class Test(){
         public static void main(String[] args){
             External external = new External();
             external.method(new Anonymous(){
                 //这是一个匿名内部类
                 public void abstract_method(){}
             });
         }
     }

    特点:

    1. 使用方便

    2. 不生成.Class文件

  • 相关阅读:
    [Algorithms] Insertion sort algorithm using TypeScript
    [Algorithms] Determine if a string is a palindrome
    [Algorithm] Determine if two strings are an anagram
    [Vue + TS] Watch for Changes in Vue Using the @Watch Decorator with TypeScript
    [Vue +TS] Use Two-Way Binding in Vue Using @Model Decorator with TypeScript
    uvc摄像头代码解析7
    并查集
    流程节点多场景多表单
    【图像识别】 图像处理和图像分析(leptonica)leptonica-1.68安装配置 (vs2008)
    Eclipse完美汉化教程
  • 原文地址:https://www.cnblogs.com/-Archenemy-/p/12019726.html
Copyright © 2011-2022 走看看