成员内部类(static成员内部类和非static成员内部类)
局部内部类(不谈修饰符)、
匿名内部类
class 外部类{
方法(){
class 局部内部类{
}
}
{
class 局部内部类{
}
}
}
3.1非static成员内部类
代码举例:
class First {
private int a=1;
public class Second{
private int b = 2;
public void f1(){
System.out.println("我是内部类");
System.out.println(a);
System.out.println(b);
}
}
public void f2(){
System.out.println("我是外部类");
System.out.println(a);
}
}
public class Main{
public static void main(String[] args) {
First fi = new First();
First.Second fi2 = new First().new Second();
fi.f2();
fi2.f1();
}
}
3.2static成员内部类
代码举例:
class Main {
private static int a=1;
public static class Second{
private int b = 2;
public void f1(){
System.out.println("我是内部类");
System.out.println(a);
System.out.println(b);
}
}
public void f2(){
System.out.println("我是外部类");
System.out.println(a);
}
}
public class test31{
public static void main(String[] args) {
First fi = new First();
First.Second f2 = new First.Second();
fi.f2();
f2.f1();
}
}
代码举例:
class Main{
private int a=1;
public void f1(){
class Second{
private int b = 2;
public void f3(){
System.out.println("我是内部类");
System.out.println(a);
System.out.println(b);
}
}
Second s = new Second();
s.f3();
}
public void f2(){
System.out.println("我是外部类");
System.out.println(a);
}
}
public class test31{
public static void main(String[] args) {
First fi = new First();
fi.f1();
fi.f2();
}
}
匿名内部类实现接口
代码举例:
interface f{
public abstract void getnum();
}
public class test31{
public static void main(String[] args) {
new test31().f1(new f(){
private int b = 2;
public void getnum(){
System.out.println("匿名内部类");
System.out.println(b);
}
});
}
public void f1(f a){
a.getnum();
}
}
6.1匿名的内部类是没有名字的内部类。不能继承其它类。
6.2静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
6.3局部内部类和局部变量地位类似,不能使用public,protected,缺省,private。
6.4局部内部类不能使用static修饰,也不能包含静态成员。
6.5 局部内部类可以使用外部方法的局部变量,但是必须是final的。
6.6成员内部类可以直接使用外部类的所有成员,包括私有的数据。
6.7当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的。