——<a href="" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ——-
一.内部类
1.内部类的概念:一个类在另外一个类的内部,那么这个类就叫内部类,另一个类叫做外部类
2.内部类的表现形式:
class A
{
int num ;
void display(){……}
class B
{
int age ;
void show(){……..}
}
}
所以,可以发现内部类也是一个完整的类,也具有类的所有的组成部分,它只是被定义在了另一个类的内部而已。
3.内部类的好处:内部类可以直接访问外部类的所有的成员(包括私有的,因为是在A的本类中访问),此时内部类相当于外部类的一个成员也可以被成员修饰符修饰,具有成员的访问特性,这样就可以隐藏不想对外暴露的类(Iterator的子类就实现在各集合的内部)。
4.修饰内部类的修饰符
权限修饰符:
1)public:表明内部类可以被外部的第3方类访问,定义对象
2)protect:可以被子类访问
3)默认权限:可以被包中的类访问
4)private:内部类只能在本外部类中访问,不能被第3方类访问,对本包中的其他的起到了隐藏作用。
静态修饰符:static:内部类在成员上时也可以被静态修饰,此时的内部类叫做静态内部类
1)静态内部类随着外部类的加载而加载
2)静态内部类只能访问外部类静态成员
3)静态内部类中可以有静态成员也可以有非静态成员
4)有静态成员的内部类一定是静态内部类
abstract class A
{
abstract void method();
}
class B
{
void excute()
{
new A()
{
void method()
{
执行代码
}
}.method();
}
}
1)匿名内部类实际上就是一个匿名的子类对象
2)A类可以是抽象类,可以是接口,也可以普通的类,被重写的方法也可以是普通的方法,抽象方法。
3)new A()…….就是一个匿名内部类,创建的实际上是一个A类的子类的对象。
4)匿名内部类只能使用一次,因为这个类没有名称,不能再次调用
5)匿名内部类不能包含static成员,从父类继承的可以,不能自己增加。(因为有static成员的内部类是静态内部,new的时候在类上没有办法声明static)
6)匿名内部类若出现在函数的参数中时,此时实际上时多态,将匿名内部类(是一个子类)赋给父类的引用。调用时不能直接调用子类新增的方法和变量。
6.内部类,外部类,第3方类的访问关系:
说明:1.内部类中有静态成员,该内部类是静态内部类。
2.静态内部类中的方法(无论是否静态)只能访问外部类的静态方法。
3.外部类的静态方法只能访问静态内部类。
4.当内部类中的方法中,内部类的成员位置出现了和外部类相同成员变量,内部类中访问局部可以直接写变量名,访问内部类中的要加this不能省略,要访问外部类中的要使用外部类名.this.引用不能省略。当没有相同时,可以省略不写,会默认加上。
5.匿名内部类可以应用于接口回调,可以用于开发事件驱动。
二.对象的产生过程
我们使用new来创建一个对象时,内存中构建对象的执行流程是:
1.不考虑继承关系时,执行流程:
2.当考虑继承关系时,创建子类的对象:
1).执行父类的静态代码块
2).在执行子类的静态代码块。
3).在执行父类的构造函数
4).最后执行子类的构造函数。
人若软弱就是自己最大的敌人