[请进]大家能不能说说抽象类和接口的异同.....up有分! 还有类只能是单重继承,接口可以多重继承,接口就是弥补了java不能实现多重继承的缺陷 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 《Effective Java》里面建议少用抽象类,多用接口 同意ai92(抵制日货^o^):《Effective Java》里面建议少用抽象类,多用接口... 接口只具备子类的一些特征而非具体实现抽象类可以具体实现一些方法!!!接口和子类是has a的关系,抽象类和子类是is a的关系! 回复人: fantasyCoder(牛仔+T恤) ( ) 信誉:94 2004-04-25 20:43:00 得分:0 接口只具备子类的一些特征而非具体实现抽象类可以具体实现一些方法!!!接口和子类是has a的关系,抽象类和子类是is a的关系!=================================================不同意“接口和子类是has a的关系,抽象类和子类是is a的关系!”接口和子类也是is a的关系 回复人: peigen(比碗浅) ( ) 信誉:98 2004-04-25 21:01:00 得分:0 抽象类中可以有抽象方法也可有一般方法,抽象方法在子类中实现而接口中的方法都是抽象方法,属性都是常量,接口类似多重继承的功能。接口没有方法 ======================================="而接口中的方法都是抽象方法,属性都是常量"不同意。属性不一定都是常量。 抽象类与接口的区别在于:1)一个类只可以继承自一个抽象类,但可实现多个接口。2)继承自抽象类的类可以不完全实现抽象类中的abstract方法,而实现某个接口的类必须实现该接口的所有方法。3)抽象类多用来表示一种抽象意义的事物,如Shape、Object、Food等;接口则相当于一个界面,用来定义一组交互的规则,并说明其所能提供的服务,例如常量包装(可以将一个包含许多常量的接口用于对该接口有访问权限的任意数量的类中),或者定义一组相关的标准操作。 game0ver12345(sfsfdsfdsdfsf) ( ) 接口里面是可以声明public String value;之类的不过首先,1.要初始化2.不能改变3.它是静态实际上,即便你不声明为static final,java一样会把它当作static final量来处理PS:永远不要在接口里面声明变量(虽然这个看起来很方便,可以直接当作常量处理,但是是不折不扣的命名污染) 2)继承自抽象类的类可以不完全实现抽象类中的abstract方法,而实现某个接口的类必须实现该接口的所有方法。--------------------非abstract类必须实现抽象父类所有抽象方法abstract类可以不实现父接口所定义方法 回复人: allenhe() ( ) 信誉:100 2004-04-25 22:04:00 得分:0 game0ver12345(sfsfdsfdsdfsf) ( ) 接口里面是可以声明public String value;之类的不过首先,1.要初始化2.不能改变3.它是静态实际上,即便你不声明为static final,java一样会把它当作static final量来处理PS:永远不要在接口里面声明变量(虽然这个看起来很方便,可以直接当作常量处理,但是是不折不扣的命名污染) ==================================================1.要初始化 是对的。2.不能改变 为什么?3.它是静态 为什么?为什么"不要在接口里面声明变量"?能不能说一下,或介绍我看一下相关的文档。 ----"接口和子类是has a的关系" ??????????????不对吧, 先问一下, 大家说的接口是指的interface 吗? 第一次听说接口interface 是支持multiple inheritance的, 当然是 is a 的关系 。另:java 不能象C++那样直接的多重继承 不是他的缺陷, 因为C++的那种多重继承有缺点(简单说就是有时会重复继承一些东西.....) 所以java 用interface 来支持多重继承。 game0ver12345(sfsfdsfdsdfsf) ( ) 呵呵,可以试试看么至于不要在接口里面声明常量,很简单,你不妨想想接口用来完成什么功能至于书那多了去了翻了翻effective java,出现在第17条我记得我当初是看java与模式的,看完后立马把所有我写的垃圾代码统统删掉 恩,我也喜欢这砖头:《java与模式》看过后,对接口和抽象类的使用有了新的认识虽然都推荐使用借口,少用抽象类。但抽象类的优点也是接口不可代替的! 实际上,即便你不声明为static final,java一样会把它当作static final量来处理=======================================================不同意这句话。你说说这句话的道理,为什么会是这样? 实际上,即便你不声明为static final,java一样会把它当作static final量来处理=======================================================不同意这句话。你说说这句话的道理,为什么会是这样?、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、估计这要去问sun了。呵呵。不过据我所知,接口之所以成为接口,是因为它要提供一个公共入口,它应是固定不变的!因为使用到此接口的类它只认得接口,它认定了接口里定义的那变量(常量)的值,它可能会使用那变量,如果具体实现了那接口的类对此变量做了修改,那么可能会导致使用此接口的其它对象因此而发生错误。----------------------------我也只能试着这么理解了。呵呵。 我估计他还不太明白接口和抽象类到底什么区别我认为接口不应该和实现多继承扯在一起简单地说,不用为了多继承而多继承就好比不会为了delegate而delegate一样 to 楼主:我正好也想问这个问题的~to allenhe() :有很多初学者在里面,可是你这样让大家很不舒服既然不懂抽象类和接口,你为什么不能好好解释一下呢? 回复人: allenhe() ( ) 信誉:100 2004-04-26 12:57:00 得分:0 我估计他还不太明白接口和抽象类到底什么区别我认为接口不应该和实现多继承扯在一起简单地说,不用为了多继承而多继承就好比不会为了delegate而delegate一样==========================================================在JAVA里,只能用接口实现多继承。“我估计他还不太明白接口和抽象类到底什么区别”,这句话好像是多余的,因为如果楼主懂,很有可能就不发这个帖子了。^_^ 那我的解释也未必正确那我用自己的理解打个比方比如说插头插头和插座不一定是同一个厂家生产的,而且生产插头的厂家很多。但是所有厂家生产的总是3眼,2眼插头即便是不同厂家生产的插头插座,那总是能够搭配一起使用在这里插头的针脚的粗细,位置,以及它的标称电压功率,我们就可以理解成为一个接口(interface)插座厂家无需知道插头是如何设计的,他只知道这种型号的针脚位置大小以及技术参数总是一样的,因此它只需针对这些参数去操作。换句话说接口定义了一系列方法,调用类无需关心它里面做了一些什么,而只需要知道这个方法完成这个功能就可以了,比较典型的应该是各种listener接下来还是用插头吧,插头的针脚和技术参数往往是固定的(可以理解为实现implements了这种接口),但是里面的电路设计各个厂家都是不同的。那不同的厂商可能有各种型号的产品,但是为了节省开发周期和原材料,他们规定了自己产品的一种设计原则,同时把共同的一些模块做成了通用配件,我们可以把这个行为理解成一种抽象类(abstract class)具体的各个型号可能不同程度的利用到了那些通用配件,不过设计人员也不需要知道那些通用配件的具体逻辑,他只知道这个配件完成这个功能,几个配件搭配可以完成一个电路逻辑就可以了。当然,再复杂一点说,厂商规定了通用配件必须和一些配件搭配使用,这些配件是各个产品不同的,比如便宜的可以用便宜的原材料,贵得可以用贵金属做。通用配件和自定义配件无需知道对方如何设计,只需要完成自己所规定的功能就可以了这个可以理解为在非abstract方法调用abstract方法。打字太累。。 回复人: allenhe() ( ) 信誉:100 2004-04-26 20:12:00 得分:0 何必一定要多继承呢? =======================================有时一些类用多继承比单继承更好的表达出他们的实际关系。 不理接,为什么要引进接口?有些时候,某接口里只有一个方法 public String getValue()直接在你要实现的类里,实现这个方法不就得了,干吗非得继承一下该接口,再给出实现,费这么多时间???还有有些接口里根本就没有方法,就更奇怪了!!???那位高手解释一下?很是一个迷惑???? 回复人: andy100085(铁桶师傅) ( ) 信誉:100 2004-04-26 22:33:00 得分:0 不理接,为什么要引进接口?有些时候,某接口里只有一个方法 public String getValue()直接在你要实现的类里,实现这个方法不就得了,干吗非得继承一下该接口,再给出实现,费这么多时间???========================================================极有可能不止一个类存在这个方法public String getValue() 没有方法的接口是标示接口,例如java.io.Serializablegame0ver12345(sfsfdsfdsdfsf) ( )我会C++ 本人初学者,妄求java 随堂练习提谢谢! 怎样组织这样的包? 这12个类谁可以帮帮我? 看下这段代码错在那里了? 求救 关于FOR循环... mysql的密码字段是加密过的,如何在程序中对明码进行验证 如何在html中引用applet程序!!!!!! 新手求救!!关于变量初始化 *考过scjp的给个意见* 在子类中去super去调用父类构造函数,这是父类构造函数的this是指子类对象吗 一個構建JTable的問題 语句 package mypack;请问这个自定义的包 mypack 放在什么地方?
《Effective Java》里面建议少用抽象类,多用接口...
抽象类可以具体实现一些方法!!!接口和子类是has a的关系,抽象类和子类是is a的关系!
接口只具备子类的一些特征而非具体实现
抽象类可以具体实现一些方法!!!接口和子类是has a的关系,抽象类和子类是is a的关系!=================================================不同意“接口和子类是has a的关系,抽象类和子类是is a的关系!”
接口和子类也是is a的关系
抽象类中可以有抽象方法也可有一般方法,抽象方法在子类中实现
而接口中的方法都是抽象方法,属性都是常量,接口类似多重继承的功能。接口没有方法
=======================================
"而接口中的方法都是抽象方法,属性都是常量"不同意。属性不一定都是常量。
1)一个类只可以继承自一个抽象类,但可实现多个接口。
2)继承自抽象类的类可以不完全实现抽象类中的abstract方法,而实现某个接口的类必须实现该接口的所有方法。
3)抽象类多用来表示一种抽象意义的事物,如Shape、Object、Food等;接口则相当于一个界面,用来定义一组交互的规则,并说明其所能提供的服务,例如常量包装(可以将一个包含许多常量的接口用于对该接口有访问权限的任意数量的类中),或者定义一组相关的标准操作。
不过首先,
1.要初始化
2.不能改变
3.它是静态
实际上,即便你不声明为static final,java一样会把它当作static final量来处理PS:永远不要在接口里面声明变量(虽然这个看起来很方便,可以直接当作常量处理,但是是不折不扣的命名污染)
--------------------
非abstract类必须实现抽象父类所有抽象方法
abstract类可以不实现父接口所定义方法
game0ver12345(sfsfdsfdsdfsf) ( ) 接口里面是可以声明public String value;之类的
不过首先,
1.要初始化
2.不能改变
3.它是静态
实际上,即便你不声明为static final,java一样会把它当作static final量来处理PS:永远不要在接口里面声明变量(虽然这个看起来很方便,可以直接当作常量处理,但是是不折不扣的命名污染)
==================================================
1.要初始化 是对的。
2.不能改变 为什么?
3.它是静态 为什么?
为什么"不要在接口里面声明变量"?能不能说一下,或介绍我看一下相关的文档。
有缺点(简单说就是有时会重复继承一些东西.....) 所以java 用interface 来支持多重继承。
至于书那多了去了
翻了翻effective java,出现在第17条
我记得我当初是看java与模式的,看完后立马把所有我写的垃圾代码统统删掉
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
估计这要去问sun了。呵呵。不过据我所知,接口之所以成为接口,是因为它要提供一个公共入口,它应是固定不变的!因为使用到此接口的类它只认得接口,它认定了接口里定义的那变量(常量)的值,它可能会使用那变量,如果具体实现了那接口的类对此变量做了修改,那么可能会导致使用此接口的其它对象因此而发生错误。----------------------------
我也只能试着这么理解了。呵呵。
我认为接口不应该和实现多继承扯在一起
简单地说,不用为了多继承而多继承
就好比不会为了delegate而delegate一样
我正好也想问这个问题的~to allenhe() :
有很多初学者在里面,可是你这样让大家很不舒服
既然不懂抽象类和接口,你为什么不能好好解释一下呢?
我估计他还不太明白接口和抽象类到底什么区别
我认为接口不应该和实现多继承扯在一起
简单地说,不用为了多继承而多继承
就好比不会为了delegate而delegate一样==========================================================在JAVA里,只能用接口实现多继承。“我估计他还不太明白接口和抽象类到底什么区别”,这句话好像是多余的,因为如果楼主懂,很有可能就不发这个帖子了。^_^
那我用自己的理解打个比方
比如说插头
插头和插座不一定是同一个厂家生产的,而且生产插头的厂家很多。
但是所有厂家生产的总是3眼,2眼插头
即便是不同厂家生产的插头插座,那总是能够搭配一起使用在这里插头的针脚的粗细,位置,以及它的标称电压功率,我们就可以理解成为一个接口(interface)
插座厂家无需知道插头是如何设计的,他只知道这种型号的针脚位置大小以及技术参数总是一样的,因此它只需针对这些参数去操作。
换句话说接口定义了一系列方法,调用类无需关心它里面做了一些什么,而只需要知道这个方法完成这个功能就可以了,比较典型的应该是各种listener
接下来还是用插头吧,插头的针脚和技术参数往往是固定的(可以理解为实现implements了这种接口),但是里面的电路设计各个厂家都是不同的。
那不同的厂商可能有各种型号的产品,但是为了节省开发周期和原材料,他们规定了自己产品的一种设计原则,同时把共同的一些模块做成了通用配件,我们可以把这个行为理解成一种抽象类(abstract class)
具体的各个型号可能不同程度的利用到了那些通用配件,不过设计人员也不需要知道那些通用配件的具体逻辑,他只知道这个配件完成这个功能,几个配件搭配可以完成一个电路逻辑就可以了。当然,再复杂一点说,厂商规定了通用配件必须和一些配件搭配使用,这些配件是各个产品不同的,比如便宜的可以用便宜的原材料,贵得可以用贵金属做。通用配件和自定义配件无需知道对方如何设计,只需要完成自己所规定的功能就可以了
这个可以理解为在非abstract方法调用abstract方法。
打字太累。。
何必一定要多继承呢?
=======================================有时一些类用多继承比单继承更好的表达出他们的实际关系。
有些时候,某接口里只有一个方法 public String getValue()
直接在你要实现的类里,实现这个方法不就得了,干吗非得继承一下该接口,
再给出实现,费这么多时间???
还有有些接口里根本就没有方法,就更奇怪了!!???
那位高手解释一下?很是一个迷惑????
不理接,为什么要引进接口?
有些时候,某接口里只有一个方法 public String getValue()
直接在你要实现的类里,实现这个方法不就得了,干吗非得继承一下该接口,
再给出实现,费这么多时间???
========================================================极有可能不止一个类存在这个方法public String getValue()
game0ver12345(sfsfdsfdsdfsf) ( )
我会C++