Java - 内部类

内部类以及方法的重载

1)内部类

1.内部类:定义在类里面的一个类
public class TestInnerClass {

    public int a = 5;
    //内部类
    private class InnerClass {
        private int f = 3;
        private void test() {

    private class InnerClass01 {
        private void test() {
            new InnerClass().test();
        }
    }
    public void foo() {
        InnerClass innerClass = new InnerClass();
        innerClass.f = 4;
        innerClass.test();
    }
}

//普通的外部类
class C3 extends TestInnerClass{

}
2.关于内部类的一些说明

(1)内部类没有对外部类没有任何隐藏,也就是说,当内部类声明为private的访问控制权限时,它的外部类及其此类中另外的外部类,也可以调用其私有属性。

(2)内部类可以直接调用外部类的内容,但当外部类调用内部类的内容时,就必须先创建其对象。就好比,有外部类对象但是没有内部类对象,当内部类调用外部类的属性时,外部类则肯定有对象(看后面的外部类与内部类创建对象时的内存空间)。

(3)内部类与外部类是所属级别关系,内部类是外部类的所属。动态内部类创建对象和继承创建对象非常相似。先创建外部类对象再创建内部类对象,在上述public void foo() 方法中没有创建外部对象就直接创建内部对象是因为,上述方法是一个动态方法,动态方法有一个特点,是:动态方法调用的前提,就是此对象一定存在。

(4)当创建两个TestInnerClass的对象时,再分别创建两个InnerClass的对象时,两个InnerClass不是同一个类的对象,就是来自不同的类, 所以这两个类的类型就不一样。

(5)不能单独创建内部类对象,比如:InnerClass innerClass = new InnerClass(); 因为没有外部对象时,就不能知道内部类的内存有多大,无法划分内存。内部类是存在与对象之中的

(4)当创建外部类时,是利用外部类的模板创建的外部类,此时内部类还是一个模板。所以创建两个外部类对象时,两个内部类的对象来自不同的模板,所以两个内部类的类型不同。

	反射的创建对象的过程:
	Class<TestInnerClass> c = TestInnerClass.class;
	TestInnerClass t = c.newInstancec();模板.新建一个实例()
	其中TestInnerClass是自己创建的对象,第一句的意思是创建一个自己定义类的类模板对象,
	第二句是调用类模板对	象创建出自己定义类的对象并开辟内存。

在这里插入图片描述
上图中,TestInnerClass.class 与InnerClass.class 分别是外部类与内部类的模板。

(5)当将内部类用static声明时,只要创建外部对象,就将内部类的模板引入。所以定义的方法为:外部类.内部类 对象名 = new 外部类.内部类(); 现在不创建外部类对象也能创建内部类对象,上述中的 new 是为内部类对象开辟内存空间。

下图为创建静态内部类对象的过程,与外部类对象没有任何关系。
在这里插入图片描述
(6)当内部类用static声明时,创建两个外部类对象,再用两个外部类分别创建内部类对象,这时两个内部类对象都来自于方法区的元数据区中的同一模板,所以这时这两个内部类对象为同一类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值