Java的内部类总结

作者:淡沫初夏Zz 时间:2022-08-13 01:33:41 

前言

最近看了内部类后,总结一下,首先内部类嵌套在其他内部的类,根据出现的位置和关键字,可以分为以下四种类:成员内部类,静态内部类,方法内部类,匿名内部类,接下来就介绍下这四种类,记得耐心看哦

一,成员内部类

1,成员内部类的特点

(1)private不可以用在外部类的声明,但可在内部类声明,成员变量可以是private

(2)内部类,外部类可以相互访问彼此的私有域

A:内部类访问外部类的私有域可以直接访问,因为成员内部类含有隐藏对象

B:外部类访问内部类的私有域通过内部类对象访问

(3)内部类可解决Java中单继承问题

(4)内部类可以对外部隐藏

2,成员内部类的实现

public class Outter {    // 成员变量    private int age = 12;    private String name = "zh";    private static final int A = 20;    //成员内部类    class Inner{        private String a = "hello";        private int age = 20;        public void test(){            System.out.println(a);            // 可以访问外部类的私有域age            System.out.println(Outter.this.age);            //访问自己的age            System.out.println(this.age);            System.out.println(A);        }    }    // 外部类成员方法    public void fun() {        int a = 0;        // 外部类内部创建内部类对象        Inner inner = new Inner();        System.out.println(inner.a);    }}class Test {    public static void main(String[] args) {    //外部类的外部创建内部类对象        Outter.Inner inner = new Outter().new Inner();    }}public class Outter {
   // 成员变量
   private int age = 12;
   private String name = "zh";
   private static final int A = 20;
   //成员内部类
   class Inner{
       private String a = "hello";
       private int age = 20;
       public void test(){
           System.out.println(a);
           // 可以访问外部类的私有域age
           System.out.println(Outter.this.age);
           //访问自己的age
           System.out.println(this.age);
           System.out.println(A);
       }
   }
   // 外部类成员方法
   public void fun() {
       int a = 0;
       // 外部类内部创建内部类对象
       Inner inner = new Inner();
       System.out.println(inner.a);
   }
}
class Test {
   public static void main(String[] args) {
   //外部类的外部创建内部类对象
       Outter.Inner inner = new Outter().new Inner();
   }
}

3,内部类和外部类的关系

A:成员内部类的创建需要依赖于外部类对象

B:内部类和外部类之间相互独立

C:两者的私有属性可以相互访问

D:语法

(1)外部类的内部创建内部类对象

Inner inner = new Inner();

(2)外部类的外部创建内部类对象

Outter.Intter intter = new Outter().new Intter();

E:在内部类的内使用隐藏的this

二,静态内部类

1,静态内部类的特点

(1)定义在外部类的内部使用static修饰,静态内部类无需外部类无需外部类产生对象就可以使用

(2)静态内部类的创建语法

StaticInnerClass.Inner inner = new StaticInnerClass.Inner();

2,比较成员内部类和静态内部类

(1)成员内部类不能拥有静态域,但可以访问外部的静态域

(2)静态内部类可以拥有成员域,但不能访问外部的成员域

3,静态内部类的实现

public class StaticInnerClass {
   static int age;
   String name;
   //静态内部类--类比--静态变量
   static class Inner{
       private int age;
       public void test(){
           System.out.println(age);
//            System.out.println(name);不能访问外部成员域
       }
   }
   public void fun() {
       Inner inner = new Inner();
   }
}
class Test1 {
   public static void main(String[] args) {
       StaticInnerClass.Inner inner = new StaticInnerClass.Inner();
   }
}

三,方法内部类

1,方法内部类的特点

(1)方法内部类定义在方法内部

(2)对外部完全隐藏,因此不能有任何访问修饰

(3)若要方法的形参只能用,不能改(形参的隐式final声明)

2,方法内部类的实现

//方法内部类
public class FunClass {
   private int age;
   public void fun(int age) {
       class Inner {
           void fun() {
//                System.out.println(age);
           }
       }
       age = 10;
   }
}

四, 匿名内部类

1,匿名内部类的特点

(1)匿名内部类定义在方法内部,类没有名字

(2)必须继承一个抽象类或者实现一个接口

(3)没有构造方法

2,匿名内部类的实现

//实现接口interface IMessage {    void fun();}public class NonNameClass {    public static void main(String[] args) {        //匿名内部类        Thread thread = new Thread(new Runnable() {            @Override            public void run() {                System.out.println("hello A");            }        });        Thread thread1 = new Thread({                System.out.println("hello ");        } );        thread.start();        thread1.start();    }}//实现接口
interface IMessage {
   void fun();
}
public class NonNameClass {
   public static void main(String[] args) {
       //匿名内部类
       Thread thread = new Thread(new Runnable() {
           @Override
           public void run() {
               System.out.println("hello A");
           }
       });
       Thread thread1 = new Thread({
               System.out.println("hello ");
       } );
       thread.start();
       thread1.start();
   }
}

来源:https://blog.csdn.net/qq_55660421/article/details/122182560

标签:Java,内部类
0
投稿

猜你喜欢

  • C# Console利用mspaint打开图像并保存的方法

    2023-07-05 16:15:43
  • Android自定义scrollview实现回弹效果

    2023-12-15 08:42:47
  • android开发教程之实现listview下拉刷新和上拉刷新效果

    2022-07-29 20:42:42
  • SpringBoot集成Shiro进行权限控制和管理的示例

    2022-12-31 19:23:21
  • C#实现chart控件动态曲线绘制

    2022-01-22 19:10:11
  • Spring通过<import>标签导入外部配置文件

    2023-03-04 06:43:58
  • Java并发之线程池Executor框架的深入理解

    2022-03-13 10:20:55
  • 浅谈java7增强的try语句关闭资源

    2022-04-29 18:57:29
  • java合并多个文件的实例代码

    2023-07-28 12:56:02
  • Eclipse安装Aptana插件(注意对应版本问题)

    2022-05-26 17:17:55
  • Spring中Bean的生命周期使用解析

    2021-09-06 23:06:54
  • android panellistview 圆角实现代码

    2022-09-03 17:34:19
  • Unity Shader片段着色器使用基础详解

    2022-09-29 10:08:28
  • 详解C语言结构体中的函数指针

    2023-11-21 13:04:33
  • 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法

    2022-11-08 10:05:09
  • C#实现简单的计算器小功能

    2023-05-13 06:46:11
  • ASP.Net动态读取Excel文件最简方法

    2022-12-24 16:38:57
  • Springboot如何根据实体类生成数据库表

    2023-11-20 13:54:39
  • Java实现的校验银行卡功能示例

    2022-01-28 19:33:53
  • js判断是否含有GBK以外的字符的函数

    2022-01-25 16:47:52
  • asp之家 软件编程 m.aspxhome.com