• 内部类


    HOW:基本使用

     1 /**
     2 *需求1:在Outer类中定义内部类Inner
     3 *需求2:Inner内定义一个vistOuter方法访问Outer的x属性
     4 *需求3:Outer内定义一个vist方法访问Inner的vistOuter方法
     5 */
     6 class Outer
     7 {
     8     String x="outer";
     9     //定义内部类
    10     class Inner
    11     {
    12         String x="inner";
    13         //内部类可以不创建外部类的对象而访问外部类的属性Outer.this.属性
    14         void vistOuter(){
    15             System.out.println("访问到的是:"+Outer.this.x);
    16         }
    17     }
    18     //外部类不能直接访问内部类的方法,必须要先创建内部类的对象,通过该对象访问
    19     void vist(){
    20         //new Inner()看成一个对象,再.方法
    21         new Inner().vistOuter();
    22     }
    23 }

    注意事项

    1.内部类与外部类的成员同级,所以内部类可以被private修饰!

    2.内部类与外部类的成员同级,所以内部类可以访问外部类的成员变量,即使是private

    3.如果一个内部类中有静态变量或者静态声明,那么它必须是静态内部类=》如果是静态内部类,那么:Outer.Inner.x或Outer.Inner.function()可以访问其静态成员或方法

    4.静态类不能直接访问本类的成员或者方法:可以通过实例化之后再访问

     1 class Outer
     2 {
     3     static int x=5;
     4     //因为外部类中定义了静态成员,所以这里必须是静态内部类
     5     static class Inner
     6     {
     7         //本类非静态成员
     8         int x=1;
     9         //本类静态方法
    10         static void vistOuter(){
    11         System.out.println(Outer.x);
    12         }
    13     }
    14 }
    15 
    16 class StaticNeiBu 
    17 {
    18     public static void main(String[] args) 
    19     {
    20         //调用静态内部类的静态方法:输出外部类静态成员变量
    21         Outer.inner.vistOuter();
    22         //访问静态内部类的非静态成员x
    23         System.out.println(new Outer.Inner().x);
    24     }
    25 }
  • 相关阅读:
    大学毕业4年-回顾和总结(1)-钱,金钱观
    VR开发中性能问题—OculusWaitForGPU
    动态规划(一)
    POJ 2229 Sumsets
    hihoCoder #1122 : 二分图二•二分图最大匹配之匈牙利算法
    hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集
    hihoCoder #1121 : 二分图一•二分图判定
    HDU 1978 How many ways
    POJ1579 Function Run Fun
    POJ 2081 Recaman's Sequence
  • 原文地址:https://www.cnblogs.com/erhai/p/4694015.html
Copyright © 2020-2023  润新知