非静态内部类
public class Body {
class Heart{
void work() {
System.out.println("do");
}
}
public void get1() {
Heart heart0 = new Heart();
Heart heart1 = new Body().new Heart();
Heart heart2 = this.new Heart();
}
public static void get2() {
Heart heart4 = new Body().new Heart();
}
}
静态内部类
public class Body {
static class Heart{
void work() {
System.out.println("do");
}
}
public void get1() {
Heart heart0 = new Heart();
}
public static void get2() {
Heart heart3 = new Heart();
Heart heart4 = new Body.Heart();
}
}
静态匿名内部类
public interface Mammal {
void eat();
}
public class Body {
static Mammal mammal = new Mammal() {
@Override
public void eat() {
System.out.println("ads");
}
};
}
静态内部类直接访问静态属性方法 创建对象来访问非静态属性方法
public class OutClass {
private double weight=72;
public static void print(String name) {
System.out.println(name);
}
static class InClass{
{
double weight = new OutClass().weight;
print("Tom");
}
}
}
如果为static内部类只能直接定义在外部类中。因为java命令只执行一次
public class OutClass {
public static void main(String[] args) {
static class InClass {
public void printInfo() {
System.out.println("我是有名内部类");
}
}
}
}
在非外部类中定义的内部类和局部变量一样,其使用范围从定义的位置开始到其所在直接语句块结束。
public class OutClass {
public static void main(String[] args) {
if(args!=null) {
class InClass{
}
}
InClass inClass = new InClass();
}
}
只有有名静态内部类中才允许有静态成员(静态属性、静态代码块和静态方法)。