package hong.study.inner_class;
/**
* 内部类仍然是一个独立的类,编译之后会产生相对应的class文件,但是前面冠以外部类类名和¥符号
* 内部类可以使用修饰符,public、private、protected、default
* @author Hong
*
*/
public class Study01 {
//Class01和Class02就看成外部类的成员来看待
private static String name;
private int age;
//静态内部类
private static class Class01{
/*
*1、其中可以定义普通的成员变量和静态的成员变量
*2、只能调用外部类的静态的方法和静态的属性,该类和外部类的属性和方法是平级的
*3、在不相关类中,可以直接创建静态内部类的对象(不需要先创建外部类对象,才能创建静态内部类对象) Study01.Class01 c = new Study01.Class01();
*4、静态内部类实际上和其外部类联系很少,也就是命名空间上的联系
*/
}
//成员内部类
private class Class02{
/*
* 1、成员内部类就像一个成员变量一样存在于外部类中
* 2、成员内部类可以访问外部类的所有成员,包括private
* 3、成员内部类的this指内部类本身,要想拿到外部类对象可以使用:外部类名.this
* 4、成员内部类的对象一定要绑定在外部类对象上,因此想创建内部类对象必须先创建外部类对象
* 5、成员内部类不能有静态成员(除非声明成常量final,并且是常量表达式)或者静态方法
*/
}
public void sayHello(){
String s = "Hello";
//方法内部类
class Class03{
/*与方法中的局部变量的地位类似
* 1、不能用public、private等修饰
* 2、只能在声明的方法内可见,只在本方法中可用
* 3、内部定义的内容:不能有静态变量和方法
* 4、不能使用方法中的局部变量,例如s,除非是final修饰的局部变量
* *原因:方法中的局部变量在栈中创建,随着方法执行完,就会被销毁,如果执行方法的时候创建了方法内部类对象,而且使用了局部变量
* *因为类对象是在堆中创建的,有可能方法中的局部变量销毁之后,堆中还有这个对象,还在用这个局部变量,此时会出现错误
* *如果声明成final,那么在类的对象使用的时候,会拷贝一份该常量,即使常量被销毁,还是有这个值可以使用。
*/
}
//匿名内部类
Runnable runnable = new Runnable() {//这里并不是new了接口,而是定义了匿名内部类的实体,并创建了匿名内部类的一个实例
//注意,这里runnable不是创建的匿名内部类的名字,而是创建的匿名内部类实例的名字
/*
* 使用方式:1、继承式;2、接口式;3、参数式
* 格式就是采用这种格式,这里采用接口,还可以采用继承的形式
* 这里的匿名内部类放在方法中,也是方法内部类,需要符合方法内部类的要求
*/
@Override
public void run() {
// TODO Auto-generated method stub
}
};
}
}
224/225_尚学堂_高淇_java300集最全视频教程_内部类
最新推荐文章于 2020-06-23 16:50:38 发布