Java中为什么要有接口

一、百度知道有人提问

http://zhidao.baidu.com/question/59472152

java为什么要定义接口,“当一个类实现一个借口时,它必须实现接口中定义的所有方法”。这个是教材上面说的,那么为什么要定义一个接口呢,所有的方法不都是在类中实现的吗,只不过在类中把接口中的方法头部照抄一遍罢了?意思就是为什么要用类去实现只有方法头部而没有方法体(一个空壳)的接口

回答1.

1 接口的作用是实现多重继承  因为只能继承一个类(规定的)
2 LZ的意思是接口定义的方法,在实现它的子类中有了,不是重写了吗?它存在的意思是抽象出来了。类似于目录吧!让人更清晰!

回答2.

建议你看一看api帮助文档中的接口是怎么写的

回答3

一个类只能继承一个父类,但是可以实现一个或多个接口

回答4

abstract关键词能让你在类里创建一个或多个没有定义的方法—你给出接口,但是留一部分没做定义,这部分由它的派生类来实现。而interface关键词则创建了一种完全抽象的,根本不提供实现的类,它不仅是一种是抽象类的极端表现的形式,而且是一种能让你将一个对象上传到多个基类的手段。它提供了类似C++的“多重继承(multiple inheritance)”的功能。 

    Interface是对abstract关键词的进一步强化,它能让你定义类的形式:方法名,参数列表,返回值,它的方法不用特别声明都是public的。Interface也可以包含数据成员,但是它天生就是static和final的,准确得说,它不是接口的组成部分,而是保存在这个接口的动态存储区。Interface的意思是“所有”“实现”这个接口的类都应该长成这个样子,只要用到了这个interface都知道它有哪些方法可以调用。当你implements一个interface的时候,你必须把这个interface的方法定义成public的,不这样java编译器就会报错。 

    Java的多重继承,由于interface不带任何实现——也就是说interface和内存无关——因此不会有谁去阻止interface之间的结合。这一点很重要,因为有时你会遇到“x既是a又是b 还是c”这种将多个接口结合在一起的行为,被称为“多重继承”。Java并不强制你必须去继承abstract或“具体”类,但是你只能继承一个非interface的类,所有别的基类元素都必须是interface,你
只需把他们放在implments关键词后面,用逗号隔开,你可以实现任意多个interface;也可以把这个类上传到interface。 
接口也可以继承,通过继承来扩展interface,加入新的方法,也可以通过继承将多个接口合并成新的interface接口继承还有其特殊的方面就是可以一次继承多个接口,通常extends只用于类,但是由于一个接口可以由多个interface拼接而成,因此在创建新的接口的时候可以用extends表示多个“基接口”,base Interface之间要用逗号分隔。 

关于接口的详细内容,请看《Thinking in JAVA》接口一章;
关于接口的高级用法见《JAVA与模式》接口专题

回答5

打个比方 温总理说 我们要建设一个什么工程

那么总理的口号就是接口
具体实现 有各级政府完成
这是一种工程思想
也是逻辑分层的实现
不同的类可以实现同一个接口 
这就是接口的强大之处

回答6

1.接口可用来实现多重继承,java中多重继承,定义类时,只可有一个父类。但是每个类可以实现多个接口,以这种方式来实现多重继承。
2.接口定义了一组方法,这些方法可以供给其它类来实现。就像“司马药师”兄弟说得,很通俗。而类在实现接口的方法时,却可以有不同的方式,每个类实现同一个接口中同一个方法的代码可以不相同。
看下面代码:
public interface Test000 {
public void play();
}public class Test001 implements Test000{
public void play() {
  System.out.println("Test001");
}
}
public class Test002 implements Test000{
public void play() {
  System.out.println("Test002");
}
}
public class Test003 {
public static void main(String[] args) {
  Test000 t1 = new Test001();
  Test000 t2 = new Test002();
  Test001 t3 = new Test001();
  Test002 t4 = new Test002();
  show(t1);
  show(t2);
  show(t3);
  show(t4);
}
public static void show(Test000 t){
  t.play();
}
}
这里,在Test003中,show(Test000 t)方法中接收一个Test000类型的参数,可是在main方法中调用show方法时却使用了4种方法,对于show方法来说,它接受Test000类型的参数,可是有了接口,我们可以给它传入的参数就可以有了变化。我们还可以有Test005,Test006类来实现Test000,那么它们的对象也可以传入show方法,当然,使用t1,t2那样的方式来new对象,show就不知道我们给它是对象实际上类型已经变了,这样,我们就可以做很多的事,而show并不知道。

 

二、百度知道有人提问

http://zhidao.baidu.com/question/153666129

java中为什么要接口这个东东啊?

回答1

接口定义了一些常量和抽象方法,可以实现多个接口,弥补了java类不能多继承

回答2

解决Java中不能多继承的问题,C++能多继承,所以没接口,在Java中,只能继承一个父类,不能继承多个,为了解决这个问题,就用了接口,接口可是实现多个

回答3

接口是为了屏蔽实现的不同的差异。

 

 

 

 

Java中接口的定义与实现接口抽象方法

[java]   view plain copy
  1. //如果抽象类的类体里的方法全部都是抽象方法,可以把这个类定义为接口  
  2. //换言之,类体里全部都是抽象方法,可以把这个类定义为接口.  
  3. interface Runer//接口的定义,接口里只包含常量和抽象方法.  
  4. {  
  5.     String texing="动时要振动";//接口里的常量默认是用public static final标志的  
  6.     void run();//默认的访问权限是public.  
  7.     String jump();  
  8. }  
  9.   
  10. interface Animals extends Runer//一个新的接口可以继承另一个接口  
  11. {  
  12.     void breathe();//在继承的基础上,有新的矿展.动物不仅能动,还能呼吸.  
  13. }  
  14. //实现接口抽象方法的方式 注意联想实现抽象类里的抽象方法的方式.  
  15. abstract class Fish  implements Animals//实现接口抽象方法的定义  
  16. {//如果省掉abstract, Fish类类体必须覆盖Animals里的所有抽象方法,否则报错.  
  17.     public void run()//public不能省,因为上面都是public型,子类访问父类,访问权限不能比父类低  
  18.     {  
  19.     System.out.println("Fish is swiming");  
  20.     }  
  21.     public String jump()  
  22.     {  
  23.         System.out.println("Fish靠尾巴跳动");  
  24.         return "wooo";  
  25.     }  
  26.     public void breathe()  
  27.     {  
  28.     System.out.println("Fish呼出的是汽泡");  
  29.     }  
  30. }  
  31. //比较:实现抽象类的抽象方法与实现接口的抽象方法所采取的方式.  
  32. //实现抽象类的抽象方法,是通过abstract class 子类名 extends 父类名     -----格式  
  33. //实现接口的抽象方法,是通过abstract class 类名a  implements 类名b       ------格式  
  34. //两者相同点:都要声明抽象类abstract class 类名,不同点,前者用关键字extends  
  35. //后者用implements  


简洁代码:

[java]   view plain copy
  1. interface Runer  
  2. {  
  3.     String texing="动时要振动";  
  4.     void run();  
  5.     String jump();  
  6. }  
  7.   
  8. interface Flyer  
  9. {     
  10.     int ID=20;  
  11.     void fly();  
  12. }  
  13.   
  14. interface Animals extends Runer  
  15. {  
  16.     void breathe();  
  17. }  
  18.   
  19. abstract class Bird implements Runer,Flyer//实现多个接口  
  20. {  
  21.     public void run() {}  
  22. }  
  23. abstract class Fish  implements Animals//实现接口  
  24. {  
  25.     public void run()  
  26.     {  
  27.     System.out.println("Fish is swiming");  
  28.     }  
  29.     public String jump()  
  30.     {  
  31.         System.out.println("Fish靠尾巴跳动");  
  32.         return "wooo";  
  33.     }  
  34.     public void breathe()  
  35.     {  
  36.     System.out.println("Fish呼出的是汽泡");  
  37.     }  
  38. }  
  39. //class person {}  
  40. abstract class student extends person implements Runer,Flyer//继承一个类的同时,实现多个接口.  
  41. {  
  42.     public void run() {}  
  43.     public String jump(){return "ee";}  
  44. }  

转载于:https://www.cnblogs.com/alionxd/articles/3100061.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值