java中接口可不java接口可以继承类吗一般类,为什么?

学如逆水行舟 不进则退
一、百度知道有人提问“java为什么要定义接口,“当一个类实现一个借口时,它必须实现接口中定义的所有方法”。这个是教材上面说的,那么为什么要定义一个接口呢,所有的方法不都是在类中实现的吗,只不过在类中把接口中的方法头部照抄一遍罢了?意思就是为什么要用类去实现只有方法头部而没有方法体(一个空壳)的接口”回答1.1&接口的作用是实现多重继承& 因为只能继承一个类(规定的)2 LZ的意思是接口定义的方法,在实现它的子类中有了,不是重写了吗?它存在的意思是抽象出来了。类似于目录吧!让人更清晰!回答2.建议你看一看api帮助文档中的接口是怎么写的回答3一个类只能继承一个父类,但是可以实现一个或多个接口回答4abstract关键词能让你在类里创建一个或多个没有定义的方法—你给出接口,但是留一部分没做定义,这部分由它的派生类来实现。而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接口继承还有其特殊的方面就是可以一次继承多个接口,通常extends只用于类,但是由于一个接口可以由多个interface拼接而成,因此在创建新的接口的时候可以用extends表示多个“基接口”,base Interface之间要用逗号分隔。&关于接口的详细内容,请看《Thinking in JAVA》接口一章;关于接口的高级用法见《JAVA与模式》接口专题回答5打个比方 温总理说 我们要建设一个什么工程那么总理的口号就是接口具体实现 有各级政府完成这是一种工程思想也是逻辑分层的实现不同的类可以实现同一个接口&这就是接口的强大之处回答61.接口可用来实现多重继承,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并不知道。&二、百度知道有人提问“java中为什么要接口这个东东啊?”回答1接口定义了一些常量和抽象方法,可以实现多个接口,弥补了java类不能多继承回答2解决Java中不能多继承的问题,C++能多继承,所以没接口,在Java中,只能继承一个父类,不能继承多个,为了解决这个问题,就用了接口,接口可是实现多个回答3接口是为了屏蔽实现的不同的差异。&&&&[java]&&&&&interface&Runer&&{&&&&&&String&texing="动时要振动";&&&&&&void&run();&&&&&&String&jump();&&}&&&&interface&Animals&extends&Runer&&{&&&&&&void&breathe();&&}&&&&abstract&class&Fish&&implements&Animals&&{&&&&&&public&void&run()&&&&&&{&&&&&&System.out.println("Fish&is&swiming");&&&&&&}&&&&&&public&String&jump()&&&&&&{&&&&&&&&&&System.out.println("Fish靠尾巴跳动");&&&&&&&&&&return&"wooo";&&&&&&}&&&&&&public&void&breathe()&&&&&&{&&&&&&System.out.println("Fish呼出的是汽泡");&&&&&&}&&}&&&&&&&&&&&&简洁代码:[java]&interface&Runer&&{&&&&&&String&texing="动时要振动";&&&&&&void&run();&&&&&&String&jump();&&}&&&&interface&Flyer&&{&&&&&&&&&int&ID=20;&&&&&&void&fly();&&}&&&&interface&Animals&extends&Runer&&{&&&&&&void&breathe();&&}&&&&abstract&class&Bird&implements&Runer,Flyer&&{&&&&&&public&void&run()&{}&&}&&abstract&class&Fish&&implements&Animals&&{&&&&&&public&void&run()&&&&&&{&&&&&&System.out.println("Fish&is&swiming");&&&&&&}&&&&&&public&String&jump()&&&&&&{&&&&&&&&&&System.out.println("Fish靠尾巴跳动");&&&&&&&&&&return&"wooo";&&&&&&}&&&&&&public&void&breathe()&&&&&&{&&&&&&System.out.println("Fish呼出的是汽泡");&&&&&&}&&}&&&&abstract&class&student&extends&person&implements&Runer,Flyer&&{&&&&&&public&void&run()&{}&&&&&&public&String&jump(){return&"ee";}&&}&&
阅读(...) 评论() &JAVA 继承基本类、抽象类、接口介绍
字体:[ ] 类型:转载 时间:
Java是一个面向对象的语言,java面向对象一般有三大特征:封装、继承、多态
封装:就是把一些属性和方法封装到一个类里。 继承:就如子类继承父类的一些属性和方法。 多态:就如一个父类有多个不同特色的子类。 这里我就不多讲解,下面我主要说明一个继承。继承是OOP(面向对象)的一个特色,java只支持单继承(如果继承两个有同样方法的父类,那么就不知道继承到那个父类的,所以java只支持单继承)。继承是java的一个特色,我们用的所以类都继承Objict类,所以就要Object类的方法,如toString()、getClass()、wait()……所以我们建立的类都有父类。 Java中一般有三种类: 基本类:也就是一般的类(一般所说的类就是基本类),是对象的模板,是属性和方法的集合。可以继承其他基本类、抽象类、实现接口。 抽象类:有抽象方法的类(抽象方法就是该方法必须由继承来实现,本身只定义,不实现)。抽象类可以有一个或多个抽象方法,他是基本类和接口类的过度。 接口类:一般叫做接口,该类中的所有方法都是抽象方法,该类的方法本身只定义不实现。 抽象类和接口一个由【abstract class + 抽象类名】一个由【interface +接口名】定义,接口中的所以方法都是抽象方法,而抽象类有部分方法是自身实现了的,一些只定义不实现。 基本类的定义:
代码如下: public class Fruit { public void price() { System.out.println("水果价格"); } public void weight() { System.out.println("水果重量"); } }
抽象类的定义:
代码如下: public abstract class Fruit { public void price() { System.out.println("水果价格"); } public abstract void weight(); }
接口类的定义:
代码如下: public interface Fruit { public void price(); public void weight() ; }
从上面我们可以看出接口就是抽象类的升级版,由于该类的方法全是抽象方法,所以把abstract换成interface。而接口的方法必须由子类才能实现。 继承 继承基本类,可以继承父类的方法,也可以从些,也可以扩充。下面是实现接口基本类的类:
代码如下: public class Apple extends Fruit { }
该类中就有Fruit基本类中的两个方法:price()和weight(); 继承抽象类,必须实现抽象类的抽象方法,可以修改父类的方法,和添加方法。下面是继承抽象类的类:
代码如下: public class Apple extends Fruit { @Override public void weight() { System.out.println("水果重量"); } }
该类继承类Fruit的price()方法,同时实现了Fruit抽象类的weight()方法。 继承接口类(也就实现接口),必须实现接口类的所有的抽象类和添加了。下面是继承接口的类:
代码如下: public class Aple implements Fruit { @Override public void price() { System.out.println("水果价格"); } @Override public void weight() { System.out.println("水果重量"); } }
该类是实现Fruit接口的所以抽象方法。 Java只支持单继承(继承基本类和抽象类),但是我们可以用接口来实现(多继承接口来实现) 如:public class Apple extends Fruit implements Fruit1, Fruit2{} 一般我们继承基本类和抽象类用extends关键字,实现接口类的继承用implements关键字。其实继承是很简单的,可以就是没有弄清这两个关键字,当我们弄清楚也就是比较简单的。 接口也可以继承接口如:public interface Fruit1 extends Fruit {}这是接口中的多重继承,同理抽象类和基本类也同理。如果我们把基本类添加final修饰,也就定义该类不被继承,该类不能作为父类。同时基本类的方法可以用public 、private、proptected来修饰方法,用final来阻止继承该方法。 这里只是自己的理解,有些地方时用词不当的,只是觉得这样用词更好的理解,请大家谅解。有些地方由于不是这里的重点,没有讲清楚,希望大家通过其他方式了解。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具1471被浏览372830分享邀请回答32123 条评论分享收藏感谢收起56655 条评论分享收藏感谢收起查看更多回答269被浏览16234分享邀请回答A collection represents a group of objects, known as its elements. Some collections allow duplicate elements and others do not. Some are ordered and others unordered.
根据这些描述于是又有了下一层,Set、List、Queue,这是针对Collection中不同类型的集合的抽象定义,其内部声明的方法如下:我们发现有很多不同的方法,这个就是对Collection不同维度的演进。职责不断的细化,对于其它的接口,情况是一样的。这点和画家在创作时先画出轮廓,然后再一点一点的勾勒细节有异曲同工之妙。对于题主提出的问题,接口继承有什么意义?不妨这样考虑,假如没有接口继承,会变成什么样?假如不让接口继承,那么所有接口中的方法都放到一个接口中,这是只有一个接口,那么这个接口规定的行为不觉得有点太多了么,既要负责返回一个迭代器,可以用来迭代,又要是一个集合,而且既要定义有序集合的行为,又要定义无序集合的行为,既要定义有重复元素的集合的行为,又要定义无重复元素的集合,假设只有一个方法来定义集合的行为,请为这个方法该怎么实现。千万不要说加上一大堆if else 的判断语句,如果这时候有新的集合类型加入了,难道再加一个if else语句么?无疑这是一种糟烂的设计。反观通过接口继承产生的层级接口,层次分析,职责分明,Set就是Set,List就是List,想要实现那种结构直接实现对应的接口即可。换个角度看,通过接口继承,可以重新定义上层已经定义的行为,也不会影响到同一层级的其他接口中的行为。在简单的系统中,当然并不一定用到接口继承,但一个相对复杂的系统中,如JDK的集合框架,通过接口继承可以称得上是一种良好的设计。235 条评论分享收藏感谢收起11616 条评论分享收藏感谢收起查看更多回答

我要回帖

更多关于 java 接口能继承类吗 的文章

 

随机推荐