您的位置:首页 > 职场人生

黑马程序员——基础学习(六)内部类与包

2015-07-13 20:52 281 查看
------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
4000
路径即可。

数据库驱动,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

我的想法

为避免多个类重名的情况,如果出现两个相同名字的类,可通过包将两者区分,从而避免冲突
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息