------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
内部类
内部类定义:
将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。
访问特点:
内部类可以直接访问外部类中的成员,包括私有成员。
而外部类要访问内部类中的成员必须要建立内部类的对象。
内部类的实例化方式:
在当前类中:
Inside inner = new Inside();
在外部访问(如果此内部类允许在外部访问):
Outside.Inside inner = new Outside().new Inside();
内部类覆盖外部类的成员:
class Outside{ int num = 1; class Inside{ int num = 2; void fun(){ int num = 3; System.out.println(num); System.out.println(this.num); System.out.println(Outside.this.num); } } } class Demo { public static void main(String[] args) { Outside.Inside in = new Outside().new Inside(); in.fun(); } }
内部类的位置
内部类定义在成员位置上
可以被private static成员修饰符修饰。
被static修饰的内部类只能访问外部类中的静态成员。
如果一个内部类中包含静态成员,那么此内部类也必须被声明为静态的。
访问静态内部类:Outside.Inside inner = new Outside.Inside();
访问静态内部类的静态方法:Outside.Inside.staticFun();
内部类定义在局部位置上
也可以直接访问外部类中的成员。
同时可以访问所在局部中的局部变量,但必须是被final修饰的。
我的想法
当描述事物时,事物的内部还有事物,则该事物使用内部类来描述,因为内部事物要使用外部事物内容
举例来说:楼房内部还有家庭住户,家庭住户中还有房间,这就可以用内部类描述。(总不能访问一个住户,就建立一个楼房对象吧,那就可真是有钱人的风范了。)
局部内部类:
可以在一个方法体内定义一个内部类,此时这个内部类叫:局部内部类;
当局部内部类需要访问在方法体内定义的局部变量时,该变量必须是final的。
获取局部内部类对象:
由于局部内部类是定义在方法体内,所以,其”类名”作用域范围在方法体内。
可以在方法内实例化内部类对象,并将引用向上转型。返回其父类或父接口类型;可对外隐藏实现细节
我的想法
当内部类只在外部类中的某个方法中,创建了这个类型的对象时,且仅使用了一次,那么可在这个方法中定义局部类。
我的代码
interface IA { void show(); } class A implements IA { public void show(){ System.out.println("A——>show()"); } } class Demo { public static void main(String[] args) { //使用子类方式 fun(new A()); //使用匿名内部类方式,不需要先期定义子类 fun(new IA(){ public void show(){ System.out.println("匿名内部类——>show()"); } }); } public static void fun(IA aObj){ System.out.println("执行了fun方法"); aObj.show(); } }
匿名内部类
就是内部类的简化写法。
前提:
内部类可以继承或实现一个外部类或者接口。
格式为:
new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}
匿名内部类在开发中的应用
一般情况是这样的:有一个接口。
有个具体的类,这个具体类中有一个方法的参数是接口。
使用方式:
A:自定义类实现接口,将来自定义类对象作为参数传递
B:用接口的匿名内部类用法
我的理解:
就是建立一个带内容的外部类或者接口的子类匿名对象。
包(package)
对类文件进行分类管理。
给类提供多层命名空间。
写在程序文件的第一行。
类名的全称的是 包名.类名。
包也是一种封装形式。
import关键字
简化类名。
一个程序文件中只有一个package,可以有多个import。
用来导包中的类,不导入包中的包。
包之间的访问
被访问的包中的类权限必须是public的。
类中的成员权限:public或者protected
protected是为其他包中的子类提供的一种权限
四种权限:public、protected、(默认)、private
public可在同一类中、同一包中、子类和不同包中访问
protected可在同一类中、同一包中和子类中访问
dafult可在同一类中和同一包中访问
private只能在同一类中访问
Jar包
ava的压缩包
方便项目的携带。
方便于使用,只要在classpath设置jar路径即可。
数据库驱动,SSH框架等都是以jar包体现的。
Jar包的操作
通过jar.exe工具对jar的操作。
创建jar包
jar -cvf mypack.jar packa
查看jar包
jar -tvf mypack.jar [>定向文件]
解压缩
jar -xvf mypack.jar
自定义jar包的清单文件
jar –cvfm mypack.jar mf.txt packa
我的想法
为避免多个类重名的情况,如果出现两个相同名字的类,可通过包将两者区分,从而避免冲突