栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java的四种内部类详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java的四种内部类详解

N种内部类 1.什么是内部类?
  • 内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类。
  • 他一共有以下几种:
  1. 成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类
2.成员内部类
  • 咱们先看一下定义成员内部类的方式,代码如下:
public class Outer                   //外部类
{
    private int id;
    public void out()             
    {
        System.out.println("外部类");
    }

    public class Inter               //内部类
  {
     public void in()
        {
         System.out.println("内部类");
        }
  }
}
  • 然后咱们编写了主程序,来看看成员内部类是怎么输出的,既然要调用方法,就得先把他new出来

外部类:Outer outer = new Outer();

内部类:Outer.Inner inner = outer.new Inner();

然后看一下代码

public class application {
    private static Object Outer;

    public static void main(String[] args) {
        Outer outer = new Outer();               //外部类实例化
        //通过这个外部类来实例化这个内部类
        Outer.Inner inner = outer.new Inner();    //内部类实例化
        inner.in();     //调用内部类的方法
    }
}
===========================================
    最终输出结果:
    内部类

咱们是通过这个外部类来实例化这个内部类的。

  • 咱们也可以通过内部类访问外部类的私有变量,代码如下

  • Outer类

public class Outer
{
    private int id=10;
    public void out()
    {
        System.out.println("外部类");
    }

    public class Inner
  {
     public void in()
        {
         System.out.println("内部类");
        }
        public void getID(){
            System.out.println(id);
        }

  }
}
  • 主程序
public class application {
    private static Object Outer;

    public static void main(String[] args) {
        Outer outer = new Outer();
        //通过这个外部类来实例化这个内部类
        Outer.Inner inner = outer.new Inner();
        inner.getID();                        //调用内部类的方法,来访问外部类的私有变量
    }
}
======================================
    最终输出结果:
    10

内部类可以获得外部类的私有属性。

2.静态内部类
  • 静态内部类和成员内部类区别就是,在内部类的public 的后面加一个static就行,代码如下
public class Outer
{
    private int id=10;
    public void out()
    {
        System.out.println("外部类");
    }

    public static class Inner           //加一个static就行
  {
     public void in()
        {
         System.out.println("内部类");
        }
  }
}
  • 内部类中无法获得外部类的私有变量了,他会报错的。因为内部类是静态的,在外部类一加载的时候,静态的就同时加载完成,此时外部类的私有变量还没有加载,若想用内部类调用外部类的私有变量,那么也需要在私有变量中加一个static即可,代码如下;
public class Outer
{
    private static int id=10;            //私有变量中加上一个static
    public void out()
    {
        System.out.println("外部类");
    }

    public static class Inner
  {
     public void in()
        {
         System.out.println("内部类");
        }
     public void getID(){                  //这样内部类可以获得外部类的静态的私有变量
         System.out.println(id);
     }

  }
}

静态的内部类只能获得外部类的静态的私有变量

  • 既然内部类变成了静态的,那么在主程序对他进行调用的时候,肯定会用不同的方法进行调用。咱们只是简单了解一下这个。
public class application {
    private static Object Outer;

    public static void main(String[] args) {
        Outer outer = new Outer();

    }
}

主程序的代码只能写成这个样子,无法实例化内部类了。

3.匿名内部类
public class Outer
{
    
}
//一个Java类中可以有多个class类,但是只能有一个public class 类
class A{
    
}
class B{
    
}

内部类是在public外面的,在一个大的Java类里面,只能有一个public class 类,但可以有多个class类名字。

  • 咱们平时调用底下class中的方法的时候,咱们需要new这个类,代码如下:
public class testclass {
    public static void main(String[] args) {
        Apple apple = new Apple();        //咱们平时都是这个样子去调用下面类中的方法
        apple.eat();
    }
}
class Apple{
    public void eat(){
        System.out.println("eat");
    }
}

同样,咱们看看匿名内部类是怎么调用底下的方法的,代码如下:

public class testclass {
    public static void main(String[] args) {
        //没有名字初始化类,不用将实例保存 到变量中。
   new Apple().eat();             //匿名内部类
    }
}
class Apple{
    public void eat(){
        System.out.println("eat");
    }
}

没有名字初始化类,不用将实例保存到变量中。上面就是匿名内部类,因为你不知道这个new的对象的名字,但是把他里面的方法进行调用了。

4.局部内部类
  • 咱们看一下他的格式
public class Outer
{
public void run(){
    class inner {       // 这个就是局部内部类,是包含在方法里面的类。
      
    }
  }
}

同样的是,也可以在局部内部类里面写一些方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号