interface Animal //接口是不能实例化一个对象的,如:new Animal
{
void eat();
void sleep();
}
class Zoo
{
private class Tiger implements Animal//实现了接口,就要实现接口中所有的抽象方法
{
public void eat()
{
System.out.println("tiger eat");
}
public void sleep()
{
System.out.println("tiger sleep");
}
}
Animal getAnimal()//定义一个方法,返回类型是Animal
{
return new Tiger();//可以用实例化的对象作为Animal的返回值。
}
}
class Test
{
public static void main(String[] args)
{
Zoo z=new Zoo();//产生一个动物园的对象
Animal an=z.getAnimal();//获取一个动物
an.eat();
an.sleep();
}
}
内部类实现一个接口,利用接口定义一个变量an,再通过Zoo的一个内部类Tiger实现了这个接口,去获取一个动物对象。然后调用接口当中的吃和睡觉方法。
interface Animal
{
void eat();
void sleep();
}
class Zoo
{
private class Tiger implements Animal //Tiger这个类为private 这样就不能在Zoo外部被访问了。只能通过接
口 来获取Tiger这个类的对象。z.getAnimal();返回到Tiger,获取方法。
{
public void eat()
{
System.out.println("tiger eat");
}
public void sleep()
{
System.out.println("tiger sleep");
}
}
Animal getAnimal()
{
return new Tiger();
}
/*Animal getAnimal() {
return new Animal() //返回的对象是匿名的内部类对象
//class AA 内部类
{ //其实是定义了一个类,匿名的内部类。
public void eat()
{
System.out.println("animal eat");
}
public void sleep()
{
System.out.println("animal sleep");
}
}; 分号不能少!
}*/
}
class Test
{
public static void main(String[] args)
{
Zoo z=new Zoo();
Animal an=z.getAnimal();
an.eat();
an.sleep();
}
}
为什么要用内部类呢?