java中常见的几种内部类,你会几个?(未完)

简介: java中常见的几种内部类,你会几个?(未完)


java中常见的几个内部类,你会几个?我会四个!

在看每个新知识点时,我们不禁有这样或者那样的疑问,比如它是什么?怎么用?带着这些疑问我们继续往下看:

它(内部类),是什么?

内部类,顾名思义就是内部的类,什么的内部?我们都知道java中基本的操作单元是类,那么在类的内部还有一个类(也可以说是类中嵌套类),这样的结构,我们就可以称这种(类中的类)为内部类。

接下来我们可以看一个简单的内部类案例,代码如下:

package org.test;
//外部类
public class People {
  //外部类的方法
  public void show(String name){
    System.out.println("你好"+name);
  }
  
  //内部类
  class Peo {
    //内部类的方法
    public void show(String name){
      System.out.println("你好"+name);
    }
  }
  
  //外部类的main方法
  public static void main(String[] args) {
    //创建内部类的对象
    Peo p = new People().new Peo();
    p.show("张三");
    System.out.println("---------------");
    //调用外部类的
    new People().show("李四");
  }
}

分析一下代码,我们先写了一个外部类People,在外部类中写一个show方法,并且需要一个String类型的参数,紧接着有在该类中重新声明了一个名为Peo的类(内部类),该内部类中也写了一个show方法,且需要一个Stirng类型的参数。

然后我们在外部类的main方法中,分别调用内部类与外部类的方法,运行结果为:

可见,内部类的用法并不难,下面我们来深入的看看。

java中的内部类只是java编译器的概念,对于java的虚拟机而言,它是没有java内部类的概念的,也就是说java中的内部类最后也会被编译成一个独立的class文件。

Java中的内部类可以分为四种:

  • 静态内部类
  • 成员内部类
  • 方法内部类
  • 匿名内部类

它(内部类)怎么用?

1.静态内部类:

静态内部类的声明和静态方法声明类似,就是将关键词改成了class,如下:

package org.test;
//外部类
public class People {
  static int num;
  
  
  //内部类
  static class Peo {
    private static String name ;
    //内部类的方法
    public static void show(){
      System.out.println("数字是:"+num);
      System.out.println("欢迎关注:"+name+",嘿嘿!");
    }
  }
  
  //main方法
  public static void main(String[] args) {
    new People().num = 888;
    Peo.name = "雄雄的小课堂";
    Peo.show();
  }
}

分析代码:

我们在外部类People中声明了一个int类型的num,在内部类中声明了name属性和show方法。然后在主体main方法中调用,其结果为:

总结: 静态内部类可以直接访问外部的静态属性和方法,但是不可访问外部类的实例属性和方法。

2.成员内部类:

将静态内部类的static关键词去掉就成了成员内部类,代码如下:

package org.test;
//外部类
public class People {
  
  private static int age ;
  String address ="山东济南";
  
  //内部类
   class Peo {
    private  String name ;
    //内部类的方法
    public  void show(){
      System.out.println("年龄是:"+age);
      System.out.println("地址是:"+address);
      System.out.println("名称是:"+name+",嘿嘿!");
      
    }
  }
  
  //main方法
  public static void main(String[] args) {
    Peo p = new People().new Peo();
    People.age = 18;
    p.name = "雄雄的小课堂";
    p.show();
  }
}

运行结果为:

显而易见,成员内部类中除了可以调用外部类中的私有的静态属性外,还可以调用外部类的实例属性。

下面还有一个问题,即:当外部类中的属性与内部类中的属性重名时,在内部类中如何区分使用该属性呢,代码如下:

//外部类
public class People {
  
  //年龄
  private static int age ;
   String address ="山东济南";
  
  //内部类
   class Peo {
     //姓名
    private  String name ;
    //年龄
    private int age = 28; //内部类和外部类重名的属性
    //内部类的方法
    public  void show(){
      System.out.println("年龄是:"+age);
      System.out.println("年龄是:"+age);
      System.out.println("地址是:"+address);
      System.out.println("名称是:"+name+",嘿嘿!");
      
    }
  }
  
  //main方法
  public static void main(String[] args) {
    Peo p = new People().new Peo();
    People.age = 18;
    p.name = "雄雄的小课堂";
    p.show();
  }
}

大家猜想一下age的值多少?18?28?还是一个18一个28?运行结果为:

造成这样的结果原因是什么呢?从代码中不难看的出来,age结果的值是内部类的值,并非外部类的值,那么如果我想在内部类中使用外部类的属性,我应该如何使用呢?

很简单,我们只需在该属性的前面加上“类名.this.属性名”即可,案例中我们就可以这样写:

运行结果:

今天就先分享到这里,剩余的“方法内部类”和“匿名内部类”我们明天接着讲。

支持作者

赞赏就不用啦,生活都不易,右下角的“在看/赞”点一下,如果感觉文章不错,记得分享到朋友圈让更多人知道!

粉丝群

目录
相关文章
|
1月前
|
Java
java中,剩下的这两个内部类不太好理解!
java中,剩下的这两个内部类不太好理解!
12 0
|
4月前
|
Java 数据安全/隐私保护
【零基础学Java】—内部类的概念与分类(三十)
【零基础学Java】—内部类的概念与分类(三十)
|
15天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
35 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
17天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
17天前
|
存储 Java
java接口和内部类
java接口和内部类
|
1月前
|
Java 编译器
详解java各种内部类
详解java各种内部类
|
1月前
|
设计模式 Java
JAVA内部类
JAVA内部类
10 1
|
2月前
|
Java
JAVA基础--内部类和静态内部类、单例模式---静态内部类剖析
JAVA--内部类和静态内部类、单例模式---静态内部类剖析
38 9
|
4月前
|
Java
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
40 0
|
4月前
|
安全 Java
Java单例---静态内部类
Java单例---静态内部类
29 0