内部类
public class InnerDemo {
class Inner{
public void innerMethod(){
System.out.println("this is inner method");
}
}
public Inner getInnerInstance(){
return this.new Inner();
}
public static void main(String[] args) {
//获取内部对象,这是第一种
InnerDemo innerDemo = new InnerDemo();
Inner inner = innerDemo.new Inner();
//获取内部对象,这是第二种
InnerDemo innerDemo1 = new InnerDemo();
Inner inner1 = new InnerDemo().getInnerInstance();
}
成员内部类
定义了成员内部类后必须使用外部类对象来创建内部类对象,而不能世界去new 一个内部类对象,即
内部类 对象名 = 外部类对象.new 内部类()
一般来说,编译内部类后生成的类文件是以“外部类名称$内部类名称.class” 这种形式命名的,但在Java语言中,只要存在$,就应将其替换为 “ . ” 。
public class InnerDemo{
class Inner{
}
}
成员内部类,只要外部这个类还在内存当中,这个成员内部类就会驻留在内存。
局部内部类
public class InnerDemo1 {
public void call(){ //这是一个方法
class Inner{ //这是一个方法里的局部内部类
}
}
}
局部内部类随着方法的弹栈而被销毁。
匿名内部类
定义匿名内部类的时候,必须要有接口或抽象类。这个匿名内部类还得写成一个局部的匿名内部类。
这个是非匿名内部类实现一个接口的代码:
interface Inner{
void call();
}
public class InnerDemo1 {
public void say(){
class InnerImpl implements Inner{
@Override
public void call() {
}
}
}
}
静态内部类
public class InnerDemo {
static String name; //InnerDemo.name
static class Inner{ //获取到该静态内部类构造器InnerDemo.Inner(),构造器获取实例对象new InnerDemo.Inner();
public void function(){
System.out.println("this is inner method");
}
}
}
class Outer{ //定义外部类
String info=”Welcome,everybody”; //定义外部类的私有属性
class Inner{ //定义内部类
public void print(){ //定义内部类的方法
System.out.println(info); //直接访问外部类的方法
}
}
public void fun(){ //定义外部类的方法
new Inner().print(); //通过内部类的匿名对象调用内部类的print()方法
}
}
public class OuterInner {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer out = new Outer();
Outer.Inner in = out.new Inner();
in.print();
}
}


















