最后一个暑期之备战职业路-第1天

144 阅读4分钟

今天起希望借掘金这个平台来端正自己,立个flag在掘金来鞭策自己。本想今天先做一个详尽点的计划,但既然已经选择开始,即使有时候并没有很好的计划,依然选择记入点滴。

java-内部类

内部类的主要作用:

1.封装,内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2.内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3.内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
4.内部类允许继承多个非接口类型
内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。编译完成后出现out.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同

1.成员内部类

如下几个特点:
1.该内部类相当于一个成员变量,所以可以使用任意访问修饰符。
2.该内部内的所有方法均可访问外部类的属性。
3.定义成员内部类后,必须使用外部类对象来创建内部类对象。

Outer a=new Outer();
Inner b=a.new Inner();
//或者Outer.Inner b=a.new Inner();

4.如果外部类和内部类具有相同的成员变量和方法,内部类默认访问自己的,若要访问外部类的,使用this关键字。
成员内部类不能含有static变量和方法,因成员内部类需先创建外部类才能创建自己

2.静态内部类

static修饰通常称为嵌套类,特定如下:
1.该内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问。

//外部类定义成员变量name
new Outter().name

2.如果外部类的静态成员与内部类的成员名称相同,可通过类名.静态成员访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过成员名直接调用外部类的静态成员。

//外部类定义静态成员变量ID
Outter.ID

3.创建静态内部类的对象时,不需要外部类的对象,直接内部类 对象名=new 内部类()

3.局部内部类

指内部类定义在方法和作用域中
定义完局部内部类要在外部类的方法或作用域内创建方法类内部类对象从而去调用内部类的方法。
特点如下:
1.不能被public,private,static修饰。
2.不能再外部类中创建该内部类实例,应该在方法或作用域中。
3.内部类访问包含他的方法中的变量时,必须由final修饰。
4.外部类不能访问局部内部类,只能在方法体重访问局部内部类,且必须在内部类定义后。

//含局部内部类的方法中final修饰的变量内部类才可访问
final String name...
//在方法或作用域中创建内部类实例
Inner a=new Inner();
Inner.方法();

4.匿名内部类

没有class关键字,只能使用一次,通常用来简化代码的编写。

new 类名(参数列表)-接口(){//其中形参要用final
    
}

特点如下:
1.使用前提:必须继承一个父类或实现一个接口。
2.匿名内部类中不能定义构造函数。
3.匿名内部类为局部内部类,所以同样有局部内部类的所有限制。
4.不能存在任何静态成员变量和静态方法。
5.不能是抽象的,必须实现继承的类或接口的所有抽象方法。

记在后面:
1.Java 中被 static修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。