内部类(上)成员内部类,局部内部类的使用

简介: 内部类(上)成员内部类,局部内部类的使用

前言

       如果在一个文件中创建了两个类,那么这两个类是并列关系,不存在哪一个类包含哪一个类的情况。如果在类中再定义一个类,那么这个在类中被定义的类叫做内部类。

一、内部类是什么?

       内部类:内部类是在一个类内部定义的类。

           作用:可以访问外部类的成员,并提供更好的封装和组织代码的能力。

二、如何使用?

1.成员内部类

       语法:

public class OuterClass{  //外部类
  private class InnerClass{ //成员内部类
      //…
    }
}

 规则1:内部类可以随意使用外部类的成员方法和成员变量,即使有 private 权限关键字修饰,也可以使用。

class OuterClassa{  //外部类
    private int a = 0;    //外部类成员变量
    private void b(){
        //外部类成员方法
    }
  private class InnerClass{ //内部类
      void c() {   //内部类的成员方法
            a++;
            b();
            //在内部类方法中,调用了外部类的成员方法和成员变量
    }
    }
}

规则2:内部类的成员只有在内部类的范围之内是可知的,不能被外部类使用。外部类中可以使用内部类对象引用调用内部类的成员变量

        规则3:如果从外部类中初始化一个内部类对象,那么内部类对象就会绑定在外部类的对象上。内部类的初始化方式也是使用new关键字,在外部类和外部类非静态方法中直接实例化

interClass in = new interClass();

   规则4: 如果是在静态方法中实例化内部类对象,需要调用外部类对象。内部类的形式指定该对象的类型

//在main方法中:
OuterClass out = new OuterClass();    //外部类实例化
OuterClass.innterClass in =out.new interClass();    //外部类对象实例化内部类对象

另一种方法:在方法中返回值实例化内部类对象:通过方法返回值实现成员内部类的实例化

public OutInterface doit() {  
    //定义一个方法,返回值类型为 OutInterface接口
  return new InnerClass("访问内部类构造方法");
    //return new 关键字,实现实例化内部类对象
  }

实例:

interface OutInterface{
  // 创建接口,方法通过接口实现 new实例化 内部类对象
}
class OuterClass2{
  //定义一个内部类实现OutInterface接口
  private class InnerClass implements OutInterface{
    InnerClass(String s){ //内部类构造方法
      System.out.println(s);
    }
  }
  public OutInterface doit() {  //定义一个方法,返回值类型为 OutInterface接口
      return new InnerClass("访问内部类构造方法");
  }
}
public class InterfaceInner {
  public static void main(String[] args) {
    OuterClass2 out = new OuterClass2();
    //调用 doit()方法,返回一个OuterInterface接口
    OutInterface outinter = out.doit();
        //通过外部对象 out 调用 doit()方法,new关键字 实例化内部类对象
  }
}

输出结果:

解析:

       1.创建了一个接口。用于外部类doit()方法,返回值类型为接口,实现内部类的实例化。

       2.创建了一个外部类。外部类中写了一个 doit()方法,用于在静态方法中创建内部类对象。

       3.创建了一个内部类。内部类实现了接口,并且写了一个构造方法。

       4.创建了一个静态方法。静态方法中创建了外部类对象。通过外部类对象,调用外部类方法doit()方法,实现内部类的实例化(尽管赋值的对象是一个接口)。

2.局部内部类

       局部内部类:在类的方法任意的作用域中定义的内部类。

       语法:

public OutInterface action(String x) {
        //这是一个方法
    class innerClass implements OutInterface{
      //这是写在方法里的一个局部内部类
    }
  }

实例:

package package5;
public class Demo2 {
  interface OutInterface{
  }
  public OutInterface action(String x) {
    class innerClass implements OutInterface{
      //这是写在方法里的一个局部内部类
      public innerClass(String s) {
        //局部内部类的构造方法
        s = x;
        System.out.println(s);
      }
    }
    //方法返回值为实例化局部内部类,括号中赋值了局部内部类的构造方法,通过实现一个接口,
    return new innerClass("");
  }
  public static void main(String[] args) {
    Demo2 de = new Demo2();
    de.action("这里是局部内部类");
  }
}

输出结果:

附加规则:

      局部内部类:在方法中定义的局部内部类只能访问方法中 final类型的局部变量,并且不能改变该局部变量

总结

       以上就是对java的内部类的部分介绍,成员内部类,局部内部类的使用。如果有其他的问题,欢迎在评论区评论,我会及时地进行反馈。下一篇补充完内部类的剩下内容。

相关文章
|
2月前
|
Java 编译器
内部类14
内部类14
17 2
|
3月前
|
Java
成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类
这篇文章详细介绍了Java中的四种内部类:成员内部类、静态内部类、局部内部类和匿名内部类,包括它们的使用场景、特点和示例代码。
成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类
|
6月前
|
Java
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
41 3
|
6月前
内部类
内部类
20 1
|
6月前
|
Java 编译器
内部类详解
内部类详解
|
Java
内部类(下)匿名内部类,静态内部类的使用
内部类(下)匿名内部类,静态内部类的使用
77 0
|
Java 编译器
你真的了解四种内部类吗
你真的了解四种内部类吗
71 0
|
编译器
神奇的内部类
神奇的内部类
44 0
JavaN种内部类
内部类的使用场景、作用: 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计。 内部类通常可以方便访问外部类的成员,包括私有的成员。
81 0
|
Java
四种内部类你都了解了吗?
四种内部类你都了解了吗?
76 0