内部类、内置类、嵌套类


明确:内部类=内置类=嵌套类(由于翻译的问题造成)


1、定义:

就是将一个类定义在另一个类的里面,里面的那个类就称为内部类。

2、访问特点

(1)内部类可以直接访问外部类中的数据,包括私有成员。
(2)而外部类要访问内部类中的成员必须建立内部类的对象。

3、编译生成的文件名

外部类名$内部类名.class
其中名字含有所属关系

4、为什么要使用内部类呢?

可以使访问变量更加简单。


eg1:
(1)

```
class outer
{
    private int a=3;

}

class inter
    {
       void show()
       {
           System.out.println("show run..."+a);
       }    
    }
class outer
{
private int a=3;
class inter
{
   void show()
   {
   System.out.println("show run..."+a);
   }  
}
}

(1)中的两个对象,如果inter想要访问outer中的a,必须通过建立实例化对象进行访问。而对于(2)中的inter则不需如此繁琐,可以直接访问,因为inter是outer中的一个部分。

eg2:(有点不恰当,纯属娱乐)
孙悟空向铁扇公主借扇子——飞到肚子里和在肚子外,肚子外没借到,但是肚子里就可以借到了。

5、一般用于对类的设计

分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时就可以使用内部类了。
eg:身体
心脏设计在身体内,因为心脏要访问身体内部的很多部分,所以直接设计在身体里面。

6、内部类的修饰符

(1)直接访问外部类中的内部类的成员——格式:外部类名.内部类名=new 外部类对象.内部类对象();
eg: outer.inter=new outer().new.inter();
(2)当内部类是一个静态类时,相当于一个外部类,应为outer加载时,inter就加载了。
eg:outer.inter i=new outer.inter();//此时直接调用即可,不用在new inter
i.show();
(3)当内部类是静态时,成员也是静态时,(如果内部类定义了静态成员,该内部类也必须是静态的)
eg: outer.inter.show();

7、细节辨析

(1)

class outer
{
    int num=3;
    class inter
    {
        int num=4;
        void show()
        {
            int num=5;
            System.out.println("num="+num);
        }
    void show1()
    {
        new inter().show();
    }
    }
}
public class innerClassDemo {
public static void main(String[] args)
{
    new outer().show1();
}
}
输出:5

(2)

class outer
{
    int num=3;
    class inter
    {
        int num=4;
        void show()
        {
            int num=5;
            System.out.println("num=“+this.num);
        }
    void show1()
    {
        new inter().show();
    }
    }
}
public class innerClassDemo {
public static void main(String[] args)
{
    new outer().show1();
}
}
输出:4

(3)

class outer
{
    int num=3;
    class inter
    {
        int num=4;
        void show()
        {
            int num=5;
            System.out.println("num=“+outer.this.num);
        }
    void show1()
    {
            new inter().show();
    }
    }
}
public class innerClassDemo {
public static void main(String[] args)
{
    new outer().show1();
}
}
输出:3

解释: 为什么内部类能直接访问外部内的成员呢? 因为内部类持有了外部类的引用——外部类名.this 由此可知内部类和外部类也是依赖于对象进行引用。

发布了19 篇原创文章 · 获赞 36 · 访问量 17万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章