day10笔记
1、包:package
定义:包就是文件夹,用于区分相同的类名。
格式: package 包名;
包名:全部小写,可以单级包,可以多级包
顺序问题:
package 》》 import 》》 class
带包的类该如何编译运行:
方式1:手动建包
A:用javac编译生成.class文件
B:手动建立文件夹
C:把.class文件放到文件夹中
D:仍在当前文件下运行.class文件
方式2:自动建包
javac -d . 文件名.java
2、不同包下类的使用:
A:先建包
B:访问不到的类定义为public
如果包名比较长,那么就出现了导包技术
3、四种修饰符的种类和使用:
private:只能在本类中使用
默认:不仅在本类中使用,还能在同一个包下使用
protected:不仅在本类中使用,还能在同一个包下使用,还能被不同包下的子类使用
public:最大权限,什么情况下都能使用
4、内部类概述:
定义:将一个类定义在另一个类里面,里面那个类就是内部类。
访问特点:
内部类可以直接访问外部类的成员(包括私有成员)
外部类可以通过创建内部类的对象来使用内部类的成员
内部类的定义位置:
A:成员位置:成员内部类
B:局部位置:局部内部类
4.1、成员内部类使用方式:
1.1.1 可以通过在成员变量位置上,创建成员内部类的对象使用该内部类的成员
1.1.2 可以通过外部类中的成员方法,在成员方法中创建该内部类的对象,来使用该内部类的成员
1.2.1 如果在其他类中想直接使用非静态内部类的成员(此时这个内部类不是静态的,所调用的方法也不是静态的),请使用一下格式:
外部类名.内部类名 变量 = 外部类对象.内部类对象;
1.2.2 如果在其他类中想直接使用静态成员内部类的成员(此时这个内部类是静态的),请使用一下格式:
外部类名.内部类名 变量 = new 外部类名.内部类名();
成员内部类修饰符:
A:private 修饰符,出于安全考虑,常见用法。
B:static 为了方便,直接用类名调用(如果内部类中有静态的方法或者成员变量,那么这个时候内部类也一定要使用修饰符 static)
这个时候调用方法的格式就是:
外部类名.内部类名 变量名 = new 外部类名.内部类名();
变量名.成员方法或者成员变量;
4.2、局部内部类:
定义:方法中定义的类。
结论:局部内部类访问局部变量,该变量必须被final修饰。
(面试问答)这个结论的原因:局部变量会在方法调用完毕后立马消失,而局部内部类还在使用着局部变量,当方法执行结束后,方法区中的内容还没有消失,也就是说这个变量还必须存在。所以,为了延长局部变量的生命周期,就加final修饰了。
内部类的命名规则:
成员内部类:外部类$内部类.class
局部内部类:外部类$1第一级内部类.class
匿名内部类:
定义:没有名字的局部内部类。
前提:
必须存在一个类,抽象类,或者接口
定义内部类的格式为:
new 类名或者接口名()
{
重写类 或者 接口中的方法
也可以自定义新的方法
};
什么时候使用匿名内部类呢?
一般来说在接口或者抽象类中的方法在3个一下的时候。考虑使用匿名内部类。
以后当一个方法接收的形式参数是一个抽象类或者 接口时,考虑使用。
匿名内部类:是一个继承了类或者实现接口了的匿名的子类对象。
注意:所有父类或者父接口出现的地方完全可以使用子类对象替代。
|
|