通常一个接口都会有一个或几个抽象方法,实现接口的类再去实现覆写(实现)这些 方法.怎样理解一个没有任何内容的接口呢? 象下面的程序,接口 Fish 无任何属性和方法.
/* filename: InnerClassUpperCase2.java
*/package cs.ch7;class Cat
{ public void eat(Fish fish)
{
System.out.println("猫正在吃"+fish);
}}
interface Fish
{
}
class PetStore
{ private class Sardine implements Fish
{
private String name; public Sardine()
{
name="沙丁鱼";
} public String toString()
{
return name;
}
} private class Herring implements Fish
{
private String name; public Herring()
{
name="青鱼";
} public String toString()
{
return name;
} } private class Tuna implements Fish
{
private String name; public Tuna()
{
name="金枪鱼";
} public String toString()
{
return name;
}
} public Fish provideSardine()
{
return new Sardine();
} public Fish provideHerring()
{
return new Herring();
} public Fish provideTuna()
{
return new Tuna();
}
} //====================================== class InnerClassUpperCase2 测试类,含main()
//====
public class InnerClassUpperCase2
{ public static void main(String[] args)
{
Cat cat=new Cat(); //生成Cat类的对象。
PetStore petStore=new PetStore(); //生成Petstore对象。
cat.eat(petStore.provideSardine());
cat.eat(petStore.provideHerring());
cat.eat(petStore.provideTuna());
}
}
//====================================== end class InnerClassUpperCase2
/* filename: InnerClassUpperCase2.java
*/package cs.ch7;class Cat
{ public void eat(Fish fish)
{
System.out.println("猫正在吃"+fish);
}}
interface Fish
{
}
class PetStore
{ private class Sardine implements Fish
{
private String name; public Sardine()
{
name="沙丁鱼";
} public String toString()
{
return name;
}
} private class Herring implements Fish
{
private String name; public Herring()
{
name="青鱼";
} public String toString()
{
return name;
} } private class Tuna implements Fish
{
private String name; public Tuna()
{
name="金枪鱼";
} public String toString()
{
return name;
}
} public Fish provideSardine()
{
return new Sardine();
} public Fish provideHerring()
{
return new Herring();
} public Fish provideTuna()
{
return new Tuna();
}
} //====================================== class InnerClassUpperCase2 测试类,含main()
//====
public class InnerClassUpperCase2
{ public static void main(String[] args)
{
Cat cat=new Cat(); //生成Cat类的对象。
PetStore petStore=new PetStore(); //生成Petstore对象。
cat.eat(petStore.provideSardine());
cat.eat(petStore.provideHerring());
cat.eat(petStore.provideTuna());
}
}
//====================================== end class InnerClassUpperCase2
public void eat(Fish fish){
System.out.println("猫正在吃"+fish);
}
http://www.qinglobo.com/
而且我觉得既然是鱼, 还是应该有些鱼的行为.象上面的程序, 把接口定义成Stone, Book似乎都行,为什么非要定义成Fish呢? 不好理解.
它们的行为就是toString(),
fish接口告诉别人,实现fish接口的东西是鱼类的
就想Serializable接口告诉别人,实现它的是可序列化的
那也是重写了Object的方法,与接口Fish 也没关系啊?
这篇文章也让我更易理解. http://blog.csdn.net/senton/article/details/1361152
谢谢各位!