3.4.内部类与匿名类

来源:互联网 发布:网络布线视频教程下载 编辑:程序博客网 时间:2024/06/14 19:04
1.包
(1)带包的编译和运行
javac -d . HelloWorld.java
(2)package,import,class的顺序

package > import > class


2.权限修饰符

权限修饰符本类同一个包下(子类和无关类)不同包下(子类)不同包下(无关类)privateY   默认YY  protectedYYY publicYYYY

3.常见的修饰符
(1)分类:
权限修饰符:private,默认,protected,public
状态修饰符:static,final
抽象修饰符:abstract
(2)常见的类及其组成的修饰
类:
默认,public,final,abstract
成员变量:
private,默认,protected,public,static,final
构造方法:
private,默认,protected,public
成员方法:
private,默认,protected,public,static,final,abstract
(3)另外比较常见的:
public static final int X = 10;
public static void show() {}
public final void show() {}
public abstract void show();


4.内部类
(1)内部类的访问规则
A:可以直接访问外部类的成员,包括私有
B:外部类要想访问内部类成员,必须创建对象
(2)内部类的分类
A:成员内部类
B:局部内部类
(3)成员内部类
A:private 为了数据的安全性B:static 为了访问的方便性:静态内部类访问的外部类数据必须用静态修饰。
成员内部类不是静态的:
外部类名.内部类名 对象名 = new 外部类名.new 内部类名();
成员内部类是静态的:
外部类名.内部类名 对象名 = new 外部类名.内部类名();

(内部类可以用静态修饰,是因为内部类可以看出是外部类的成员)
(4)成员内部类的面试题
30,20,10
class Outer {
public int num = 10;

class Inner {
public int num = 20;

public viod show() {
int num  = 30;

System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
}
(5)局部内部类
局部内部类访问局部变量必须加final修饰因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。所以,堆内存还是用该变量,而改变量已经没有了。为了让该值还存在,就加final修饰。加入final后,堆内存直接存储的是值,而不是变量名。

(6)匿名内部类
A:是局部内部类的简化形式
B:前提:存在一个类或者接口
C:格式:
new 类名或者接口名() {
重写方法;
}
D:本质:
其实是继承该类或者实现接口的子类匿名对象
(7)匿名内部类在开发中的使用
我们在开发的时候,会看到抽象类,或者接口作为参数。
而这个时候,我们知道实际需要的是一个子类对象。
如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式简化。

interface Person {
public abstract void study();
}

class PersonDemo {
public void method(Person p) {
p.study();
}
}

class PersonTest {
public static void main(String[] args) {
PersonDemo pd = new PersonDemo();
pd.method(new Person() {
public void study() {
System.out.println("好好学习,天天向上");
}
});

}
}

(8)匿名内部类的面试题(补齐代码)
interface Inter {
void show();
}

class Outer {
//补齐代码
public static Inter method() {
return new Inter() {
public void show() {
System.out.println("HelloWorld");
}
};
}

}

class OuterDemo {
public static void main(String[] args) {
Outer.method().show(); //"HelloWorld"
}
}

1 0
原创粉丝点击