上一篇:教你如何自定义“异常” | 带你学《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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学