java 内部类分类,实现实例和访问方法,匿名内部类的面试题
分类
成员内部类:与构造函数同等级,定义在外部类内,方法外
局部内部类:定义在成员方法体内
匿名内部类:没用名字的内部类,直接使用
new 类名/接口名(){
重写方法
}
的格式,可以作为接口引用返回值或抽象类对象返回值,还可完成特定的功能。
public class TestInnerClass {
public static void main(String[] args) {
//成员内部类的访问
MyOuter.Inner1 io1 = new MyOuter().new Inner1();
io1.eat();
io1.sleep();
//成员静态内部类的访问
MyOuter.Inner2 io2 = new MyOuter.Inner2();
io2.eat();
//局部匿名内部类的使用
new MyOuter().myMethod();
//面试题
MyClass.showMethod().show();
}
}
interface Animal{
void eat();
void sleep();
}
//外部类
class MyOuter{
private static int num = 123;
//成员内部类
class Inner1 implements Animal{
public void eat() {
System.out.println("eating:" + num );
}
public void sleep() {
System.out.println("sleep----");
}
}
//静态内部类
static class Inner2 implements Animal{
public void eat() {
System.out.println("eating:" + num );
}
public void sleep() {
System.out.println("sleep----");
}
}
//局部内部类
public void myMethod() {
class Inner5 implements Animal{
public void eat() {
System.out.println("我是局部匿名类eat----");
}
public void sleep() {
System.out.println("我是局部匿名内部类sleep=---");
}
}
Inner5 inner5 = new Inner5();
inner5.eat();
inner5.sleep();
}
}
//面试题
interface Print{
public abstract void show();
}
class MyClass {
public static Print showMethod() {
//返回的是Print引用的实现子类对象
return new Print() {
public void show() {
System.out.println("helloword");
}
};
}
}