Java内部类基本介绍、如何实例化内部类和如何调用外部类属性和方法

一、 Java内部类分类:

1.非静态成员内部类:

内部类没有使用static关键字修饰,并且和外部类的成员变量和方法属于同一级别,这样的是非静态成员内部类(可以使用权限修饰符修饰,和final、abstract关键字修饰)。

public class Atest {
   private String name = "张三";
   //类没有用static修饰
   class Btest{
       public void say(){
           System.out.println("我是非静态成员内部类");
       }
   }
}

2.静态成员内部类:

内部类使用static关键字修饰,并且和外部类的成员变量和方法属于同一级别,这样的是静态成员内部类(可以使用权限修饰符修饰,和final、abstract关键字修饰)。

public class Atest {

  public static String name = "张三";
  public String age = "23";
  
  static class Btest{
      public void say(){
          System.out.println("外部成员变量,name = " + name);
          System.out.println("我是静态成员内部类");
//            不可以调用非静态
//            System.out.println("外部成员变量,age = " + age);
      }
  }
}

3.局部内部类:

定义在一个类的成员方法、代码块、构造器内部的类,这样的类成为局部内部类(不能使用权限修饰符修饰局部内部类)。

public class Atest {
 
 public void execute(){
     class Dtest{

     }
 }
}

4.匿名内部类:

匿名内部类是没有类名的类,是特殊的局部内部类。
匿名内部类需要实现接口或是继承一个抽象类,此外匿名内部类不能定义构造器,因为是匿名
局部内部类实现接口:

public class Atest {

  public static String name = "张三";
  public String age = "23";
  

  public void execute(){
      class MyInterface implements TestInterface{

          @Override
          public void play() {
              System.out.println(name + "在打篮球");
          }
      }
  }

}
interface TestInterface{
  void play();
}

可以简化成匿名内部类:

public class Atest {

    public static String name = "张三";
    public String age = "23";


    public void execute(){
        TestInterface myInterface = new TestInterface(){

            @Override
            public void play() {
                System.out.println("这是匿名内部类");
            }
        };
        myInterface.play();
    }

}
interface TestInterface{
    void play();
}

二、 内部类如何实例化:

1.实例化非静态成员内部类:

public class Atest {

    public static String name = "张三";
    public String age = "23";


    class Btest{

        public void say(){
            System.out.println("测试非静态成员内部类实例化");
        }
    }

}
public class MainTest {

    public static void main(String[] args) {
        //非静态成员内部类实例化
        //1.实例化外部类
        Atest atest = new Atest();
        //2.实例化内部类
        Atest.Btest btest = atest.new Btest();
        btest.say();
    }
}

2.实例化静态成员内部类:

public class Atest {

  public static String name = "张三";
  public String age = "23";


  static class Ctest{

      public void say(){
          System.out.println("测试静态成员内部类实例化");
      }
  }

}
public class MainTest {

    public static void main(String[] args) {
        //静态成员内部类实例化
        Atest.Ctest ctest = new Atest.Ctest();
        ctest.say();
    }
}

三、 内部类如何调用外部类属性与方法:

public class Atest {

    public static String name = "张三";
    public String age = "23";


    class Btest{
        public String age = "22";

        public void say(String age){
            System.out.println("我是输出的形参参数,age = " + age);
            System.out.println("我是输出的Btest类成员变量,age = " + this.age);
            System.out.println("我是输出的Atest类成员变量,age = " + Atest.this.age);
        }
    }

}

执行主方法:

public class MainTest {

    public static void main(String[] args) {
        //静态成员内部类实例化
        Atest atest = new Atest();
        Atest.Btest btest = atest.new Btest();
        btest.say("18");
    }
}

输出结果:

我是输出的形参参数,age = 18
我是输出的Btest类成员变量,age = 22
我是输出的Atest类成员变量,age = 23
  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,内部类是可以直接调用外部类方法的。在给定的代码示例中,Cat类是Animal类的子类,而Cat类中有一个内部类small。在small类中,可以直接调用外部类Cat中的test()方法和继承自Animal类的shout()方法。所以,通过在内部类中使用this关键字,可以调用父类的方法。这是因为内部类实际上是外部类的一个成员,所以它可以访问外部类的所有成员,包括方法属性。所以,在给定的代码示例中,通过small类的实例化对象调用test()方法和shout()方法,是可以成功执行的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JAVA内部类方法调用](https://blog.csdn.net/m0_46303328/article/details/127194368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java里子类调用父类构造方法问题](https://blog.csdn.net/apple_51426592/article/details/126470392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值