黑马程序员——java基础 内部类

时间:2021-12-01 12:19:46

——- android培训java培训、期待与您交流! ———-
一、 内部类
内部类:
在一个类中的另一个类
将一个类,定义在了另一个类中
嵌套类

class Outer
{
class Inner
{
}
}

对于一个内部类,可以直接使用外部类的成员,包括私有成员
如果外部类要想使用内部类的成员,创建出内部类的对象
内部类存在的意义:安全
内部类,根据定义的方式,分成2中
成员内部类,定义在外部类的成员位置
局部内部类,定义在方法中


内部掌握访问的三种格式
第一种 : 内部类是非静态修饰,内部类方法是非静态修饰
外部类名.内部类名 变量 = new 外部类对象().new 内部类对象();
变量.内部类方法();

第二种: 内部类是静态修饰,内部类方法是静态修饰
外部类名.内部类名.内部类方法();

第三种:内部类是静态修饰,内部类方法是非静态修饰
外部类名.内部类名 变量 = new 外部类名.内部类对象();
变量.内部类方法();


将类定义在一个方法中,局部内部类
局部内部类,不允许使用成员修饰符,public private static
局部内部类,也是个类,拥有类的特点,实现,继承,建立对象
外面的类,调用局部内部类的方法,必须要依靠,定义的方法

class Outer
{
public void outer(){
final int x = 1 ;
class Inner{
public void inner(){
System.out.println("局部内部类方法"+x);
}
}
new Inner().inner();
}
}

局部内部类访问本地变量加final

a.方法内部变量 int x 生命周期,跟随方法走
方法进栈,存在变量,方法出栈,变量死亡
b.Inner是一个类,类调用成员,需要建立对象
对象调用内部类的方法
c.栈内存的方法生命周期长呢,还是堆内存中的对象生命周期长
对象生命长
d.变量被final修饰后,变成常量,常量和生命有关系吗,没有任何关系
变量的作用域只在定义大括号之内
javac的编译时期,内部类方法inner的x就被替换成了固定常量3


匿名内部类,没有类名
使用匿名内部类,前提,有继承父类,或者实现接口
匿名内部类,是一种简化形式,简化的是,类继承类或者实现接口,重写抽象方法,建立子类对象
匿名内部类,只能写方法中
书写格式
new 父类或者接口(){
重写抽象方法
};

interface MyInter
{
public abstract void show();
}
class Outer
{
public void outer(){
//使用匿名内部类,实现接口,重写方法,建立对象,调用重写方法,一步实现
new MyInter(){
public void show(){
System.out.println("匿名内部类重写方法show");
}
}.show();
}
}

内部类及匿名内部类总结