java的类可以定义在任何位置:
一般的类是一个文件里面写一个类,且类名和文件名相同,但是定义类的位置可以是任意的如图:
上图示例:
public class A{ class B{ } static class C{ } void doSomeThing(){ class D{ } } } class E{ } interface F{ }
实例展示:
public class A{ class B{ void im(){ System.out.println("I am B"); } } static class C{ void im(){ System.out.println("I am C"); } } void doSomeThing(){ System.out.println("I am A doSomeThing"); class D{ void im(){ System.out.println("I am D"); } } D d=new D(); d.im(); } public static void main(String[] args) { A a=new A(); a.doSomeThing(); B b=a.new B(); b.im(); C c=new A.C(); c.im(); E e=new E(); e.im(); F f=new F(){ public void im(){ System.out.println("I am F"); } }; f.im(); } } class E{ void im(){ System.out.println("I am E"); } } interface F{ void im(); }
通过上面的示例就可以看出,Java的类可以放在任何位置。
1、放在同级的类中的是其他类,不能被该文件之外的其他类访问。
2、放在类中的属于内部类。
3、放在类中且被static关键词修饰的属于静态内部类。
4、放在类中的方法里面的类属于局部内部类。
特别说明: 类F(匿名内部类)
F类是一个接口,拥有一个 im() 方法,但是没有实现类,一般来说我们要先为她创建实现类实现里面的方法,才能调用,但是也可以在创建它的实例的时候再去实现它,这样的话实现类就不见了(也就是匿名了),所有称这样的类叫做匿名内部类。
匿名内部类的三要素:
1、匿名的类必须包含抽象方法(接口/抽象类)。
2、在实例化类的同时去实现该抽象方法。
3、由于没有名字,只能使用一次。