zoukankan      html  css  js  c++  java
  • java内部类

    内部类的主要作用如下:

    1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

    2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

    3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

    内部类可分为以下几种:

    成员内部类

    静态内部类

    方法内部类

    匿名内部类

    //外部类Outer

    public class Outer{

           private int a = 99;     //外部类的私有属性

           //内部类Inner

           public class Inner{

                  int b = 2;    //内部类的成员属性

                  public  void test(){

                         System.out.println( "访问外部类中的a: " + a );

                         System.out.println( "访问内部类中的b: " + b );

                  }

           }

          

           //测试成员内部类

           public static void main(String[] args){

                  Outer o = new Outer();     //创建外部类对象,对象名为o

                  Inner i = o.new Inner();    //使用外部类对象创建内部类对象,对象名为i

                  i.test();      //调用内部类对象的test方法

           }

    }

    成员内部类的使用方法:

    1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

    2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

    3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

    静态内部类是 static 修饰的内部类,这种内部类的特点是:

    1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 

    2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

    3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类对象名= new 内部类();

    //外部类

    public class SOuter{

           private int a = 99;    //外部类的私有变量

           static int b = 1;       //外部类的静态变量

           //静态内部类

           public static class SInner{

                  int b = 2;    //内部类的变量

                  public void test(){

                         System.out.println( "访问外部类中的b: " + SOuter.b );

                         System.out.println( "访问内部类中的b: " + b );

                  }

           }

          

           //测试静态内部类

           public static void main(String[] args){

                  SInner si = new SInner();   //直接创建内部类的对象

                  si.test();     //调用test方法

           }

    }

    运行结果:  访问外部类中的b:1

                           访问外部类中的b:2

    方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

    //外部类

    public class MOuter{

           //外部类中的方法

           public void show(){

                  final int a = 25;    //常量

                  int b = 13;   //变量

                  //方法内部类

                  class MInner{

                         int c = 2;    //内部类中的变量

                         public void print(){

                                System.out.println( "访问外部类的方法中的常量a: " + a );

                                System.out.println( "访问内部类中的变量c: " + c );

                         }

                  }

                  MInner mi = new MInner();   //创建方法内部类的对象

                  mi.print();  //调用内部类的方法

           }

           //测试方法内部类

           public static void main(String[] args){

                  MOuter mo = new MOuter();    //创建外部类的对象

                  mo.show();    //调用外部类的方法

           }

    }

    一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

  • 相关阅读:
    关于celery踩坑
    关于git的分批提交pull requests流程
    SymGAN—Exploiting Images for Video Recognition: Heterogeneous Feature Augmentation via Symmetric Adversarial Learning学习笔记
    AFN—Larger Norm More Transferable: An Adaptive Feature Norm Approach for Unsupervised Domain Adaptation学习笔记
    Learning to Transfer Examples for Partial Domain Adaptation学习笔记
    Partial Adversarial Domain Adaptation学习笔记
    Partial Transfer Learning with Selective Adversarial Networks学习笔记
    Importance Weighted Adversarial Nets for Partial Domain Adaptation学习笔记
    Exploiting Images for Video Recognition with Hierarchical Generative Adversarial Networks学习笔记
    improved open set domain adaptation with backpropagation 学习笔记
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/5807274.html
Copyright © 2011-2022 走看看