inner class java_java 内部类(inner class)详解

本文详细介绍了Java中的内部类,包括其优点、如何访问外部类元素以及创建内部类对象的方法。内部类提供了更好的封装,可以独立继承接口,并且可以直接访问外部类的私有成员。在实际编程中,内部类常用于实现特定的功能或紧密耦合的设计。文章通过实例展示了内部类的创建和使用过程,帮助读者深入理解这一特性。
摘要由CSDN通过智能技术生成

一、为何使用内部类

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

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

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

一个内部类的例子:

public class OuterClass {

private String outerName;

private int outerAge;

public class InnerClass{

private String innerName;

private int innerAge;

}

}

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

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();

}

}

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

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来创建:

OuterClass outerClass = new OuterClass();

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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值