成员内部类
示例代码:
public class Demo {
public static void main(String[] args) {
Outer outer = new Outer();
//在外部创建成员内部类的实例,因为成员内部类需要依赖外部类的对象
//通常情况下,我们不建议这样来实例化内部类的对象
//Outer.Inner inner = outer.new Inner();
//inner.print();
outer.innerPrint();
}
}
class Outer{
private String name;
//建议在外部类中定一个方法,对外提供访问内部类的方法
public void innerPrint(){
Inner inner = new Inner();
inner.print();
}
//成员内部类:直接在类中定义的类
private class Inner{
public void print(){
System.out.println("inner");
}
}
}
方法内部类
概念:在一个类中方法内定义一个类
注意:
1.方法内部类只能在定义该内部类的方法内实例化,不可以在次方外对其实例化。
2.方法内部类对象不能使用该内部类所在方法的非final局部变量
示例代码:
public class Demo {
public static void main(String[] args) {
Outer outer = new Outer();
//在外部创建成员内部类的实例,因为成员内部类需要依赖外部类的对象
//通常情况下,我们不建议这样来实例化内部类的对象
//Outer.Inner inner = outer.new Inner();
//inner.print();
outer.innerPrint();
outer.show();
}
}
class Outer{
private String name;
//-----------------------成员内部类
//建议在外部类中定一个方法,对外提供访问内部类的方法
public void innerPrint(){
Inner inner = new Inner();
inner.print();
}
//成员内部类:直接在类中定义的类
private class Inner{
public void print(){
System.out.println("成员内部类");
}
}
//-----------------------方法内部类
//show方法的局部变量或方法的参数,实际上必须是常量final
public void show(){
final int x = 10;
class Inner2{
public void print(){
//x++; 报错:从内部类引用的本地变量必须是最终变量或实际上的最终变量
System.out.println("方法内部类"+x);
}
}
Inner2 inner2 = new Inner2();
inner2.print();
}
}
静态内部类
概念:在一个类内定义一个静态的内部类
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它,静态嵌套类仅能访问外部类的静态成员和方法
示例代码:
public class Demo {
public static void main(String[] args) {
Outer outer = new Outer();
//在外部创建成员内部类的实例,因为成员内部类需要依赖外部类的对象
//通常情况下,我们不建议这样来实例化内部类的对象
//Outer.Inner inner = outer.new Inner();
//inner.print();
outer.innerPrint();
outer.show();
Outer.Inner3 inner3 = new Outer.Inner3();
inner3.print();
}
}
class Outer{
private String name = "xiaohua";
//-----------------------成员内部类
//建议在外部类中定一个方法,对外提供访问内部类的方法
public void innerPrint(){
Inner inner = new Inner();
inner.print();
}
//成员内部类:直接在类中定义的类
private class Inner{
public void print(){
System.out.println("成员内部类"+name);
}
}
//-----------------------方法内部类
//show方法的局部变量或方法的参数,实际上必须是常量final
public void show(){
final int x = 10;
class Inner2{
public void print(){
//x++; 报错:从内部类引用的本地变量必须是最终变量或实际上的最终变量
System.out.println("方法内部类"+x+name);
}
}
Inner2 inner2 = new Inner2();
inner2.print();
}
//--------------------静态内部类
static class Inner3{
public void print(){
System.out.println("静态内部类");
}
}
}
匿名内部类
概念:没有名字的内部类
匿名内部类