书上有一句话这么说的:
当一个类实现一个接口时,它一定要实现接口中定义的所有方法,不然这个类就一定要声明成抽像类。然后给出了这些代码:
public inferface myinterface
{
public void add(int x,int y)
public void volume(int x,int y,int z)
}public class interfacedemo implements myinterface
{
public void add(int x,int y)
{
System.out.println(" "+(x+y));
} public void volume(int x,int y,int z)
{
System.out.println(" "+(x*y*z));
}} public void static main(String args[])
{
MyInterFace d=new InterfaceDemo();
d.add(10,20)
d.volume(10,10,10);
}这些代码 让我郁闷的是 那些方法写在类里不是更直接么。为什么还要定义接口,这样不是浪费么?
当一个类实现一个接口时,它一定要实现接口中定义的所有方法,不然这个类就一定要声明成抽像类。然后给出了这些代码:
public inferface myinterface
{
public void add(int x,int y)
public void volume(int x,int y,int z)
}public class interfacedemo implements myinterface
{
public void add(int x,int y)
{
System.out.println(" "+(x+y));
} public void volume(int x,int y,int z)
{
System.out.println(" "+(x*y*z));
}} public void static main(String args[])
{
MyInterFace d=new InterfaceDemo();
d.add(10,20)
d.volume(10,10,10);
}这些代码 让我郁闷的是 那些方法写在类里不是更直接么。为什么还要定义接口,这样不是浪费么?
动物接口
song()
人类实现动物接口
song()
{
System.out.println("人叫");
}
鸟类实现动物接口song()
{
System.out.println("鸟叫");
}去到某个类的一个方法里
void ff(动物接口)
{
动物叫(传人的实例进来就是"人叫",传鸟的实例进来就是"鸟叫")
}
在这个方法只管让"动物叫",具体是哪个动物由实际情况确定
在接口中声明方法时,不能使用native、static 、final 、synchronized 、private 、protected等修饰符。
和public类一样,public接口也必须定义在与接口同名的文件中。
接口中可以有数据成员,这些成员默认都是public static final。
举例:
interface Math
{
double PI=3.1415926;
}
class Arithmetic implements Math
{
double roundArea(double radius)
{
return PI*radius*radius;
}
}
class Student
{
public static void main(String[] args)
{
Arithmetic a=new Arithmetic();
System.out.println(a.roundArea(3));
System.out.println(Math.PI); //ok
System.out.println(Arithmetic.PI); //ok
System.out.println(a.PI); //ok
}
}
这不得不先从面向对象的一个重要特性多态说起,简单说多态的目的就是为能用一个统一的接口去实现(驱动)不同的实现(各个实现这个接口的类的处理函数,这个处理函数就是接口里声明但没给出具体代码的那个函数,即名称一样),就好象用一个标准的三角插座就可给任何电器供电一样。
假设我们定义一个接口“供电系统”,“供电系统”里声明了一个方法“三角插座()”,那么实现这个接口(可理解为遵循此接口协议,就好象各电器厂商都遵守国际插座标准尺寸一样)的各种类(各类电器)就可以都只用这种统一化的"三角插座()"就行了。往后当我们设计到一个想用电的类时,就可直接去调用这个三角插座(),而且要注意的是任何实现(遵循)此接口的类都可以调用相同的“三角插座()”这个接口。
说到此你可能觉得这个道理其实你也明白,主要是不明白于为什么java要那么做?这还得从人类这个东西说起,你要知道这世界是以人类为主的,当然什么事都要以人为本了,人类是惰性的动物,什么都图方便,发明多态也是,你先别管它那些污七八糟的概念,其目的就是为模仿现实生活的,简单说就是标准化,说穿了也还是为了方便,总之我们生活处处是标准,目的也就想处处方便。回到编程领域也是,多态就是为达到用一个统一的动作来达到驱动多种机器的目的,就好象一个标准的三角插座就可驱动所有遵守此插座协议的电器一样,这就是目的,那么回到手段就是编译器的事了,java采用了独立化的接口的方式,这也不过是java实现以上目的的手段而已,你别追究它为什么这样,这是它的方式,你就管记住那段几乎是固定化的实现接口的代码块。
重申一次:弄清它的目的,别管它用什么手段,把它背下来得了。
比如:主板上有PCI接口
声卡,网卡只要是PCI接口的,就可以插上.因为他们都implemens PCI接口.
只有在有很多类都做同一件事的时候你就感觉到了他的好。
比如A,B两个类都有add()方法是,你怎么知道处理的是那一个。但有了接口他自己就搞定了。
接口可以使一个子类有多个父亲。
如 已定义了三个接口 interface1,interface2,intface3;
pblic class Test implements interface1,interface2,interface3{
.......
}
楼主的例子很简单,只是让我们理解接口的用法而已。
在interface("契约"或"合同")里承诺了将来要实现的功能,interface里的函数声明就是这种承诺。比如,合同C承诺了三个功能: function1()、 function2()、function3(),在Java里写成:
interface C
{
void function1();
void function2();
void function3();
}
这张合同给两种人用,一是对这些功能负责的承办单位,二是使用这些功能的使用单位。
承办单位负责实现功能,"实现"两个字在Java里用implements来表示,功能的实现者,即,承办单位本身是个Class,所以"承办单位A负责实现合同C"这句话在Java里写成:
class A implements C
三个功能function1()、function2()、function3()的具体实现代码也要放在Class A中,这个负责实现合同(interface)的承办单位里:
class A implements C
{
void function1()
{
System.out.println("Hello1");
}
void function2()
{
System.out.println("Hello2");
}
void function3()
{
System.out.println("Hello3");
}
}
就这样承办单位(class A)实现了合同(interface C)中承诺的三个功能。
另一方面,合同(interface)的使用者不需要知道三个功能是如何具体实现的,它只管通过这个合同(interface)来使用其中承诺的三个功能就是了。
这样,interface起的作用就如同一份合同,是在实现类和使用类之间的桥梁。