1-静态内部类入门

一、简要介绍

image-20221115211650611

what?

​ 定义在 outer类 的==成员位置==,并且有 static 修饰。

how

1
2
3
4
5
6
7
8
9
10
class Outer{
private String outerName="我是一个外部类的私有属性";
//1.放在成员位置
//2.static 修饰
static class inner{
private String name="我是一个内部类的私有属性";
void innerprint(){
System.out.println(outerName);
}
}

二、特点

  1. 使用 static 修饰,符合 static 修饰的原则。

    1. 只能访问 外部类的 ==所有静态成员==,无法访问非静态。
  2. 可以添加任意的 访问修饰符 (public、protected、private、默认)

  3. 作用域的问题

    1. 外部类 –>访问 –>静态成员 [访问方式:1. 创建对象 2.使用方法名访问。]

      1
      2
      3
      1.创建对象

      2.对象名.xxx
    2. 内部成员—> 访问 —> 外部成员 [访问方式:直接访问所有静态成员]

      1. ==就近原则==。如果重名,使用 ==外部类.属性名==进行访问。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      class  outer{

      static String Staticname="外部类的属性";
      String name="外部类非静态属性";
      static class staticInner{
      static String Staticname="静态内部类的属性";
      void print(){
      System.out.println(Staticname);
      System.out.println(outer.staticname);
      }
      }
      }

      image-20221115212849597

    3. 外部其他类 使用静态内部类。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      package com.jhfuture.innerclass.staticInnerclass;

      public class staticner {
      public static void main(String[] args) {
      //其他外部类访问静态成员内部类的三种方法
      //1.使用 外部类名.静态类名 方法创建
      outer.staticInner staticInner = new outer.staticInner();
      staticInner.print();
      //2.在外部类里 创建一个方法/静态方法 使用外部类对象名/外部类名 . 方法名来创建。
      //2.1
      outer outerObject = new outer();
      outer.staticInner staticInner1 = outerObject.getstaticInnerInstace_commonly();
      staticInner1.print();
      //2.2
      outer.staticInner staticInner2= outer.getstaticInnerInstace_StaticVersion();
      staticInner2.print();
      }
      }

      class outer{
      static String Staticname="外部类的属性";
      String name="外部类非静态属性";
      static class staticInner{
      void print(){
      System.out.println(Staticname);

      }
      }
      staticInner getstaticInnerInstace_commonly(){
      return new staticInner();
      }
      static staticInner getstaticInnerInstace_StaticVersion(){
      return new staticInner();
      }
      }