1.成员内部类,放在类中,实例方法是:new Outer().new Inner();
package com.niming;
public class OuterStatic {
static String name;
int age;
public void run() {
System.out.println("外部类");
}
static class Inner {
// Outter.this.run();
String corlor;
public void drink() {
System.out.println("内部类" + name);
}
}
public static void main(String[] args) {
OuterStatic out =new OuterStatic();
out.name="张三";
new OuterStatic.Inner().drink();
}
}
2.静态内部类 :脱离外部类的实例独立创建。在外部类的外部构建内部类的实例,new Outer.Inner();使用静态内部类有个好处,不用考虑对象的问题了。
package com.niming;
public class OuterStatic {
static String name;
int age;
public void run() {
System.out.println("外部类");
}
static class Inner {
// Outter.this.run();
String corlor;
public void drink() {
System.out.println("内部类" + name);
}
}
public static void main(String[] args) {
OuterStatic out =new OuterStatic();
out.name="张三";
new OuterStatic.Inner().drink();
}
}
3.方法内部类,是在方法内部定义的类。
package com.niming;
import com.niming.Outter.Inner;
public class OutterF {
String name;
int age;
public void run() {
System.out.println("外部类");
class Inner {
// Outter.this.run();
String corlor;
public void drink() {
System.out.println("内部类");
}
}
new Inner().drink();
}
public static void main(String[] args) {
Outter out = new Outter();
out.run();
}
}
4.匿名内部类是在抽象方法,或者接口的基础上产生的,利用多态的特性,在new抽象类或者接口的时候产生的,并自动向上转型到接口类或者抽象类。
package com.niming;
abstract class Buru{
public abstract void run();
}
public class NiMing {
public static void main(String[] args) {
Buru a= new Buru() {
public void run() {
System.out.println("我在跑");
}
};
a.run();
}
}