1、成员内部类,在已有的类的内部声明类,也成为嵌套类,如果使用了static就变成顶级类,否则就是成员的作用域一样,内部类不能有静态成员,内部类可以使用外部的成员
public class Person1 { public int Age; class Say{ public void SayHello(){ System.out.println("你的年龄"+Age); } } } class TestPerson1{ @Test public void T(){ //引用时需要指定完整类名 Person1.Say s = new Person1().new Say(); s.SayHello(); } }
2、局部内类,在方法中声明内部类
public class Person { public int Age; //方法中增加 public void Say() { String Name = "李四"; class innerClass { public void hello() { System.out.println(Name + "你好"); } } innerClass inn = new innerClass(); inn.hello(); System.out.println("调用内部类"); } }
3、匿名内部类
匿名类是一个没有类名的特殊内部类,也叫做匿名内部类,匿名内部类适合创建只需要使用一次的类,创建匿名内部类时需要集成一个已有的父类或者是实现一个接口,由于匿名内部类本身没有类名,因此不存在构造函数。
匿名内部类,本身没有名字,使用new语句一部分来声明,格式如下:
new 父类名/接口名(){
}
注意:匿名内部类不能有构造函数,也不能包含静态成员
public class Test44 { @Test public void testPerson(){ // Person person = new Person(); // person.Say(); //通过接口创建匿名内部类,使用多态完成 MyInterFace myInterFace = new MyInterFace() { @Override public void SayHello() { System.out.println("创建匿名内部类"); } }; //调用匿名内部类的方法 myInterFace.SayHello(); } } /*** * 定义接口实现匿名内部类 */ interface MyInterFace{ void SayHello(); }