iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java的内部类和外部类怎么使用
  • 891
分享到

java的内部类和外部类怎么使用

2023-06-22 00:06:19 891人浏览 八月长安
摘要

本篇内容介绍了“java的内部类和外部类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、为何使用内部类内部类提供了更好的封装,只有

本篇内容介绍了“java的内部类和外部类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、为何使用内部类

  • 内部类提供了更好的封装,只有外部类能访问内部类

  • 内部类可以独立继承一个接口,不受外部类是否继承接口影响

  • 内部类中的属性和方法即使是外部类也不能直接访问,相反内部类可以直接访问外部类的属性和方法,即使private

  • 利于回调函数的编写

一个内部类的例子:

public class OuterClass {    private String outerName;    private int outerAge;    public class InnerClass{        private String innerName;        private int innerAge;    }}

二、内部类与外部类的联系

2.1 内部类是一个相对独立的实体,与外部类不是is-a关系

内部类是一个编译时概念,编译后外部类及其内部类会生成两个独立的class文件: OuterClass.class和OuterClass$InnerClass.class,我用javac编译器对上面的OuterClass进行编译:

 D:\>javac OuterClass.class

编译后的结果:

java的内部类和外部类怎么使用

2.2 内部类可以直接访问外部类的元素,但是外部类不可以直接访问内部类的元素

public class OuterClass {    private String outerName;    private int outerAge;    public class InnerClass{        private int innerName;        InnerClass(){            //内部类可以访问外部类的元素            outerName="I am outer class";            outerAge=23;        }        public void display(){            System.out.println(outerName+" and my age is "+outerAge);        }    }    public static void main(String[] args) {        OuterClass outerClass = new OuterClass();        OuterClass.InnerClass innerClass = outerClass.new InnerClass();        innerClass.display();    }}

在上面例子中我们可以看到,内部类可以直接访问外部类属性,尽管外部类属性是用private修饰的。这是因为在创建外部类时,内部类会自动捕获一个外部类的引用,所以内部类访问外部类元素,实际上是通过他所持有外部类引用访问的。在java中,我们可以通过OuterClass.this来获得外部类的引用,请看下面例子:

public class OuterClass {    public void display(){        System.out.println("this is OuterClass...");    }    public class InnerClass{        //获取外部类的引用        public OuterClass getOuterClass(){            return OuterClass.this;        }        public void innerDisplay(){            //内部类也可以通过外部类的引用访问外部元素            getOuterClass().display();        }    }    public static void main(String[] args) {        OuterClass outerClass = new OuterClass();        OuterClass.InnerClass innerClass = outerClass.new InnerClass();        innerClass.innerDisplay();    }}

2.3 外部类可以通过内部类引用间接访问内部类元素

public class OuterClass {    public void display(){        //外部类访问内部类元素,需要通过内部类引用访问        InnerClass innerClass=new InnerClass();        innerClass.innerDisplay();    }    public class InnerClass{        public void innerDisplay(){            System.out.println("I am inner class");        }    }    public static void main(String[] args) {        OuterClass outerClass=new OuterClass();        outerClass.display();    }}

三、创建内部类

3.1 在外部类外面(或外部类main方法)创建内部了对象

其实上面2.2例子中我们已经看到了如何创建内部类。如果要创建一个内部类对象,必须利用outerClass.new来创建:

1 OuterClass outerClass = new OuterClass();

2 OuterClass.InnerClass innerClass = outerClass.new InnerClass();  

其实我们还可以一步到位: OuterClass.InnerClass innerClass=new OuterClass().new InnerClass(); 

内部类创建方法示例:

public static void main(String[] args) {    //先创建外部类对象,再创建内部类对象    OuterClass outerClass = new OuterClass();    OuterClass.InnerClass innerClass1 = outerClass.new InnerClass();    innerClass1.innerDisplay();    //一步到位创建    OuterClass.InnerClass innerClass2=new OuterClass().new InnerClass();    innerClass2.innerDisplay();}

3.2 在外部类里面创建内部类

正如2.3代码中display()方法那样,在外部类里面创建内部类,就像创建普通对象一样直接创建:

InnerClass innerClass=new InnerClass()

四、内部类的种类:

在Java中内部类主要分为成员内部类、方法内部类、匿名内部类、静态内部类。

4.1 成员内部类

成员内部类也是最普通的内部类,它是外部类的一个成员,所以他是可以无限制的访问外围类的所有成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。

在成员内部类中要注意两点:

  • 成员内部类中不能存在任何static的变量和方法

  • 成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类

4.2 方法内部类

方法内部类定义在外部类的方法中,局部内部类和成员内部类基本一致,只是它们的作用域不同,方法内部类只能在该方法中被使用,出了该方法就会失效。 对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类。

4.3 匿名内部类

匿名内部类其实就是一个没有名字的方法内部类,所以它符合方法内部类的所有约束,初次之外,还有一些地方需要注意:

  1. 匿名内部类是没有访问修饰符的。

  2. 匿名内部类必须继承一个抽象类或者实现一个接口

  3. 匿名内部类中不能存在任何静态成员或方法

  4. 匿名内部类是没有构造方法的,因为它没有类名。

一般使用匿名内部类的场景是,要继承或实现的接口只有一个抽象方法,比如添加一个监听器:

public class Button {    public void click(){        //匿名内部类,实现的是ActionListener接口        new ActionListener(){            public void onAction(){                System.out.println("click action...");            }        }.onAction();    }    //匿名内部类必须继承或实现一个已有的接口    public interface ActionListener{        public void onAction();    }    public static void main(String[] args) {        Button button=new Button();        button.click();    }}

4.4 静态内部类

关键字static可以修饰成员变量、方法、代码块,其实它还可以修饰内部类,使用static修饰的内部类我们称之为静态内部类。静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。没有这个引用就意味着:

  • 静态内部类的创建是不需要依赖于外围类,可以直接创建

  • 静态内部类不可以使用任何外围类的非static成员变量和方法,而内部类则都可以

public class OuterClass {    private static String outerName;    public  int age;    static class InnerClass1{                public static String _innerName = "static variable";        public void display(){                        System.out.println("OutClass name :" + outerName);        }    }    class InnerClass2{                public String _innerName = "no static variable";                public void display(){            System.out.println("OuterClass name:" + outerName);            System.out.println("OuterClass age:" + age);        }    }    public void display(){                System.out.println(InnerClass1._innerName);                new InnerClass1().display();                OuterClass.InnerClass2 inner2 = new OuterClass().new InnerClass2();                System.out.println(inner2._innerName);        inner2.display();    }    public static void main(String[] args) {        OuterClass outer = new OuterClass();        outer.display();    }}

“java的内部类和外部类怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: java的内部类和外部类怎么使用

本文链接: https://www.lsjlt.com/news/301560.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java的内部类和外部类怎么使用
    本篇内容介绍了“java的内部类和外部类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、为何使用内部类内部类提供了更好的封装,只有...
    99+
    2023-06-22
  • java的内部类和外部类用法讲解
    目录一、为何使用内部类二、内部类与外部类的联系2.1内部类是一个相对独立的实体,与外部类不是is-a关系2.2内部类可以直接访问外部类的元素,但是外部类不可以直接访问内部类的元素2....
    99+
    2024-04-02
  • 怎么使用Java内部类、成员内部类、静态内部类和方法内部类
    这篇文章主要讲解了“怎么使用Java内部类、成员内部类、静态内部类和方法内部类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Java内部类、成员内部类、静态内部类和方法内部类”吧!&...
    99+
    2023-06-15
  • Java和ABAP里的外部类和内部类是什么
    这篇文章主要讲解了“Java和ABAP里的外部类和内部类是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java和ABAP里的外部类和内部类是什么”吧!JavaOuter class n...
    99+
    2023-06-04
  • java外部类与内部类怎么理解
    本篇内容主要讲解“java外部类与内部类怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java外部类与内部类怎么理解”吧! 一、内部类内部类就是将一个类A定义在类B里边,里边的...
    99+
    2023-06-22
  • java外部类与内部类简介
     一、内部类 内部类就是将一个类A定义在类B里边,里边的那个类A称为内部类,外边的类B称为外部类 成员内部类定义格式: class 外部类{ class 内部类{ } } ...
    99+
    2024-04-02
  • 怎么使用Java内部类
    这篇文章主要介绍“怎么使用Java内部类”,在日常操作中,相信很多人在怎么使用Java内部类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java内部类”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-16
  • java内部类怎么使用
    本篇内容介绍了“java内部类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、成员内部类内部类与外部类的关系a.成员内部类的创建需...
    99+
    2023-07-02
  • java外部类与内部类的关系详解
     private,public,protected,default的访问权限区别 在学习外部类与内部类之前我们首先要弄明白private,public,protected,defau...
    99+
    2024-04-02
  • c++内部类和外部类有什么区别
    在C++中,内部类和外部类的主要区别在于其访问权限和作用域。 内部类是在另一个类的内部声明的类,在外部类的作用域内,内部类可以访...
    99+
    2024-04-02
  • java内部类之成员内部类、局部内部类和匿名内部类用法及说明
    目录内部类概念分类成员内部类使用成员内部类间接方式访问内部类直接方式访问内部类外部类和内部类变量重名问题局部内部类修饰内部类的权限匿名内部类测试类 一、匿名内部内应用总结内部类概念 ...
    99+
    2022-12-23
    java成员内部类 java局部内部类 java匿名内部类 java内部类
  • Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)
    内部类是什么? 字面意思,在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。 内部类是类的第五大成员→【提示:类的五大...
    99+
    2023-10-26
    jvm
  • Java内部类与匿名内部类
    目录一、内部类什么是内部类成员内部类访问特点二、匿名内部类前提格式使用方式一、内部类 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。 成员...
    99+
    2024-04-02
  • java静态内部类怎么使用
    静态内部类是指在外部类中使用static关键字修饰的内部类。使用静态内部类的语法格式为: public class OuterCla...
    99+
    2023-10-24
    java
  • Java匿名内部类怎么使用
    这篇文章主要介绍“Java匿名内部类怎么使用”,在日常操作中,相信很多人在Java匿名内部类怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java匿名内部类怎么使用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-22
  • java匿名内部类怎么定义和使用
    在Java中,匿名内部类是一种没有显式定义类的方式,直接在代码中创建并使用类的一种方式。匿名内部类通常用于创建只需要使用一次的类对象...
    99+
    2024-02-29
    java
  • 如何理解Java内部类中的局部内部类
    这篇文章给大家介绍如何理解Java内部类中的局部内部类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。局部内部类  局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或...
    99+
    2023-06-05
  • Java 内部类
    文章目录 1、初识内部类 2、非静态内部类(实例内部类) 3、静态内部类(重点) 4、内部类的使用 5、局部内部类 6、匿名内部类 ...
    99+
    2023-09-16
    java
  • 初探Java内部类的使用
    目录一、成员内部类二、静态内部类三、匿名内部类之前对内部类的概念不太清晰,在此对内部类与外部类之间的关系以及它们之间的调用方式进行一个总结。 Java内部类一般可以分为以下三种: 成...
    99+
    2024-04-02
  • Java内部类如何使用
    今天小编给大家分享一下Java内部类如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一. 内部类简介1. 概念在Jav...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作