初见“子母类”-内部类 | 带你学《Java面向对象编程》之八十二

简介: 本节向读者介绍了内部类的概念,并结合案例通过一系列的思考引发读者对内部类带来的优势的思考,以能深入了解内部类。

上一篇:教你如何自定义“异常” | 带你学《Java面向对象编程》之八十一
【本节目标】
通过阅读本节内容,你将了解到使用内部类的原因,并能够在合适的场合中使用简单的内部类优化代码调用逻辑,使代码更加简洁。

虽然在类之中的基本组成就是成员属性与方法,但是在任何的语言里面结构也是允许进行嵌套的,所以在一个类的内部可以定义其它的类,这样的类就称为是内部类。

内部类基本定义

如果说到内部类肯定其本身是一个独立且完善的类结构,在一个类的内部除了属性和方法外,可以继续使用class定义类。
范例:内部类的基本定义

class Outer {           //外部类
    private String msg = "www.mldn.cn" ;   //私有成员属性
    public void fun() {            //普通方法
          Inner in = new Inner() ;              //实例化内部类对象
          in.print() ;            //调用内部类方法
    }
    class Inner {           //在Outer类的内部定义了Inner类
         public void print() {
             System.out.println(Outer.this.msg) ;             //Outer类中的属性
         }   //www.mldn.cn
    }
}
public class JavaDemo{
    public static void main(String args[])  {
        Outer out = new Outer() ;              //实例化外部类对象
        out.fun() ;           //调用外部类中的方法
    }
}

从整个代码上实际上发现内部类的结构并不难理解,甚至可以说其结构跟普通类一样清晰明了,那么为什么会提供有内部类这样的结构呢?

因为从整体的代码结构来讲,内部类的结构并不合理,所以内部类本身最大的一个缺陷在于破坏了程序的结构,但是破坏需要有目的的破坏,那么它也一定会有其优势,如果要想更好的观察出内部类的优势,就可以将内部类拿到外面。

范例:将以上程序分为两个类

class Outer {           //外部类
    private String msg = "www.mldn.cn" ;   //私有成员属性
    public void fun() {            //普通方法
        //思考五:需要将当前对象Outer传递到Inner类之中
        Inner in = new Inner(this) ;              //实例化内部类对象
        in.print() ;            //调用内部类方法
    }
   //思考一:msg的属性如果要被外部访问需要提供有getter方法
    public String getMsg() {
        return this.msg ;
    }
}
class Inner {           //在Outer类的内部定义了Inner类
    //思考三:Inner这个类对象实例化的时候需要Outer类的引用
    private Outer out ;
   //思考四:应该通过Inner类的构造方法获取Outer类对象
    public Inner(Outer out) {
        this.out = out ;
    }
    public void print() {
    //思考二:如果要想调用外部类中的getter方法,那么一定需要有Outer类对象
        System.out.println(this.out.getMsg()) ;             //Outer类中的属性
    }             //www.mldn.cn
}
public class JavaDemo{
    public static void main(String args[])  {
        Outer out = new Outer() ;              //实例化外部类对象
        out.fun() ;           //调用外部类中的方法
    }
}

可以发现,整体的操作之中,主要的目的就是为了让Inner这个内部类可以访问Outer这个外部类中的私有属性,但是如果不用内部类的时候整体代码非常的麻烦,所以可以得出内部类的优点:轻松的访问外部类中的私有属性。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:了解内部类,请读这份“说明书” | 带你学《Java面向对象编程》之八十三
更多Java面向对象编程文章查看此处

相关文章
|
3月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
37 7
|
3月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
46 5
|
3月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
29天前
|
Java 编译器
【Java】内部类
【Java】内部类
19 0
|
3月前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
3月前
|
存储 前端开发 JavaScript
【前端学java】面向对象编程基础-类的使用(4)
【8月更文挑战第9天】面向对象编程基础-类的使用
19 0
【前端学java】面向对象编程基础-类的使用(4)
|
3月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
34 5
|
3月前
|
Java 程序员 开发者
Java的面向对象编程:从基础到深入
【8月更文挑战第21天】在本文中,我们将探讨Java的面向对象编程(OOP)的核心概念,包括类、对象、继承、多态和封装。我们将通过实例和比喻,以通俗易懂的方式,深入理解这些概念的内涵和意义,以及它们如何影响我们的编程思维和实践。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更深入地理解Java的OOP,并启发你思考如何在你的项目中应用这些概念。
|
4月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
37 6
|
3月前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型