美文网首页Java
*Java13 内部类与局部内部类

*Java13 内部类与局部内部类

作者: 第二套广播体操 | 来源:发表于2018-10-28 14:47 被阅读0次

内部类

将一个类定义到另一个类的内部
A类要直接访问B类成员时,可以将A类定义在B类中
内部类可以直接访问外部类中成员
外部类访问内部类要创建对象
内部类相当于外部类中的成员,所以可以用成员修饰符修饰
如果内部类权限非私有,可以在外部其他程序访问到
非静态内部类中不可以定义静态方法

非静态非私有类情况

先创建外部类对象,再创建内部类对象

class Out{
    private int num=4;
    public  class Inner{
      void Show(){
          System.out.println(num);
      }
    }
}
public class InnerClassDemo {
    public static void main(String[] args) {
/*        Out o=new Out();
     Out.Inner  in=   o.new Inner();*/
Out.Inner in=new Out().new Inner();
     in.Show();
    }
}

静态非私有类情况 访问非静态成员

因为外部类加载时内部类也加载

class Out{
    private static int num=4;
    public   static class Inner{//静态内部类相当于外部类
       void   Show(){//调用非静态类要创建对象
          System.out.println(num);
      }
    }
}
public class InnerClassDemo {
    public static void main(String[] args) {
        Out.Inner inner=new Out.Inner();//因为调用的是非静态方法所以要创建对象。
        inner.Show();
    }

静态非私有类情况 访问静态成员

   Out.Inner.Show();

非静态内部类中不能声明静态方法
但是可以声明静态常量final static


获取内部类方法中、内部类中、外部类中不同的num值

package Study;
class Out{
 int num=1;
    class Inner{
        int num=2;
        void Show(){
            int num=3;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(Out.this.num);
        }
    }
    public void Method(){
        new Inner().Show();

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

局部内部类

将内部类定义在局部位置上,局部内部类,只能访问final修饰的局部变量

class Out{
 int num=1;
    public void Method(){
        final int NUM=2;//局部变量 
        class Inner//局部内部类
     {
            void Show()
            {
                System.out.println(NUM);
                System.out.println(Out.this.num);
            }
        }
         new Inner().Show();
    }
}
public class InnerClassDemo {
    public static void main(String[] args) {
        Out out=new Out();
        out.Method();
}}

因为方法在使用过后 会保留新建的对象但是弹栈后,局部变量消失造成无法找到对应变量。
但可以调用外部类的num因为外部类方法时通过创建对象建立的。存防在堆内存中 不会消失。

相关文章

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • Java 内部类、静态内部类、方法内部类(未完待续)

    内部类 什么是内部类?内部类其实就是在一个类中创建的类。内部类有四种: 成员内部类 静态内部类 局部内部类 匿名内...

  • java se 成员内部类

    一个类内部包含另一个类身体与心脏分类:1、成员内部类2、局部内部类(匿名内部类) 1、成员内部类 注:内用外可直接...

  • Java 内部类

    1. 内部类 概念:在一个类的内部再定义一个完整的类内部类分为 4 类:成员内部类、静态内部类、局部内部类、匿名内...

  • *Java13 内部类与局部内部类

    内部类 将一个类定义到另一个类的内部A类要直接访问B类成员时,可以将A类定义在B类中内部类可以直接访问外部类中成员...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • 方法内部类

    定义在外部类方法中的内部类,也称局部内部类方法内部类1.定义在方法内部,作用范围也在方法内2.和方法内部成成员使用...

  • 2020-09-12 Java内部类、匿名内部类(重要)

    内部类 一个类包含另一个类。被包含的类叫内部类。(身体和心脏的关系)分类:1.成员内部类2.局部内部类(包含匿名内...

  • java学习笔记(十三)内部类

    1、概述 内部类即在类的内部在创建一个类 分为成员内部类(直接在类中创建) 局部内部类(在成员方法中创建) 匿名内...

  • Java内部类

    代码中包含成员内部类、内部类的同名变量访问、局部内部类、局部内部类final、匿名内部类

网友评论

    本文标题:*Java13 内部类与局部内部类

    本文链接:https://www.haomeiwen.com/subject/jnvptqtx.html