普通(成员)内部类

普通(成员)内部类的格式:

  访问修饰符 class 外部类的类名{

    访问修饰符 class 内部类的类名{

      内部类的类体;

    }

  }

 

  普通内部类与我们使用的普通类没有区别,因为是内部类所有可以可以使用外部类中的私有方法。

package com.lagou.task10;

/**
 * 编程实现普通内部类的定义和使用      -   文档注释
 */
public class NormalOuter {
    private int cnt = 1;

    //定义普通的内部类,隶属于外部类的成员,并且是对象层级
    public class NormalInter{
        private String ia = "cnt";
        public NormalInter(){
            System.out.println("普通内部类的构造方法体执行到了!");
        }
        public void show(){
            System.out.println("外部类中变量cnt的数值为:"+cnt);
            System.out.println("ia = " + ia);
        }
    }
}

  内部类没有加static关键字修饰,内部类隶属于对象层级;对象层级必须先声明外部类的引用指向

外部类的对象;

  (这里比较特殊)使用外部类的引用在new的前面使用,这里就可以成功创建内部类的对象了

package com.lagou.task10;

public class NormalOuterTest {
    public static void main(String[] args) {

        //1.声明NormalOuter类型的引用指向该类型的对象
        NormalOuter no = new NormalOuter();
        //2.声明NormalOuter类中的内部类的引用指向内部类的对象
        NormalOuter.NormalInter ni = no.new NormalInter();
        ni.show();
    }
}

 

普通内部类的使用方式

  普通内部类和普通类一样可以定义成员变量、成员方法以及构造方法等。

  普通内部类和普通类一样可以使用final或者abstract关键字修饰。

  普通内部类还可以使用private或者protected关键字进行修饰。

  普通内部类需要使用外部类对象来创建对象。

  如果内部类访问外部类中与本类内部同名的成员变量或方法时,需要使用this关键字。

 

假设内部类成员变量与外部类成员变量同名,我们如何使用this关键字在内部类成员方法中分别得到该数值?

  1、在方法体内不加this关键字,得到局部变量

  2、在方法体内加this关键字,得到内部类成员变量

  3、如果想要得到外部内成员变量,必须使用外部类名.this的方式才能得到外部内成员变量。

public class NormalOuter {
    private int cnt = 1;

    //定义普通的内部类,隶属于外部类的成员,并且是对象层级
    public class NormalInter{//内部类成员变量与外部类成员变量同名
        private int cnt = 2;
public void show1(int cnt){ System.out.println("形参变量:" + cnt); } public void show2(int cnt){ System.out.println("形参变量:" + cnt); //局部优先原则 System.out.println("内部类:" + this.cnt); System.out.println("外部类:" + NormalOuter.this.cnt); } } }

 

posted @ 2020-09-08 17:36  IJLog  阅读(210)  评论(0编辑  收藏  举报