问题描述
新人一个,学java两个多月了,说说我对抽象的理解。假设电脑系统坏了,那么我们脑中首先想的就是解决方法,这时脑中想的解决方法就是抽象的如:class装系统{publicabstractvoid修电脑方法_U盘();publicabstractvoid修电脑方法_光盘();publicabstractvoid修电脑方法_ghost镜像();}如上我们想到了三种安装系统的方法,一种是需要系统光盘,一种是需要一个做成启动项的U盘,并且里面有win7的镜像,一种是需要电脑中非系统盘符内写有win7系统的镜像,并且电脑内有一键ghost;那么我们开始找所需要的装系统工具,目前找到的工具只有一个U盘,U盘内与上述符合,那么开始用U盘装系统。代码如下:classU盘装系统extends装系统{publicabstractvoid修电脑方法_U盘(){将U盘插入电脑;找到镜像装系统;安装完毕;}}如上所写:我认为抽象放到现实生活就是,发生了一些问题需要你解决,你当时想的解决方法就是抽象到,当你按照你脑中那个方法做的时候就等于将抽象方法实现了,再举个例子:你的电脑坏了需要修理,你心里就想到了解决方法(abstract),然后你就用想到的方法去修理(实现)。其实人就是一个抽象与实现的个体,如果发生一件事,你自己能解决就等于你自己把抽象方法实现了。如果自己解决不了就找到其他实现了此类抽象方法的人。还拿修电脑说事:class张三{publicvoid吃饭;publicvoid喝水;}class张三的电脑{//张三没有这功能所以publicabstractvoid修理();}class修电脑的extends张三的电脑{publicabstractvoid找到毛病修理(){电脑r=修理();}private电脑修理(){修理完毕();return修完的电脑;}}请大神点评理解的对不对,至于代码小小得了
解决方案
本帖最后由 Anderson221317 于 2014-11-27 11:52:10 编辑
解决方案二:
抽象就是抽出像的地方class装系统{publicabstractvoid修电脑方法_U盘();publicabstractvoid修电脑方法_光盘();publicabstractvoid修电脑方法_ghost镜像();}这个不像类的封装,这个像工厂一样,提供修电脑的几种方式
解决方案三:
class装系统{publicabstractvoid修电脑方法_U盘();publicabstractvoid修电脑方法_光盘();publicabstractvoid修电脑方法_ghost镜像();}
如果用抽象,个人认为如下比较合适class装系统{publicabstractvoid修电脑方法();}然后U盘,光盘,ghost三种不同的实现类都继承Class装系统,分别实现修电脑方法()这个方法
解决方案四:
从头再学吧,一窍不通修电脑有3个抽象方法,你现在只有一个,其他两个不去实现的话,是不行的
解决方案五:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。
解决方案六:
引用3楼cyf282501的回复:
从头再学吧,一窍不通修电脑有3个抽象方法,你现在只有一个,其他两个不去实现的话,是不行的
我这个只是看我对抽象的理解对不对,并不是主写代码,主要是看对抽象的理解
解决方案七:
哥们,抽象从本质上说是数学建模。面对一个复杂的业务,如何提取业务模型,这个事需求分析人员的任务。推荐下UML(统一建模语言)之类的教材,那上边对这个有很详细的解释。
解决方案八:
引用4楼zzq19860626的回复:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。
那个class装系统代表的是人遇到问题所想的,就像如果你遇到问题,首先想的就是怎么解决,我这个就是在电脑系统坏掉之后想到了三种解决方法,但是三种必须选一种来实现。就好像高中毕业选大学一样,是选清华还是选蓝翔都是心里想到,而具体去哪里要看自己。class选学校{publicvoid去清华();publicvoid去蓝翔();}class录取通知书extends{publicvoid去清华(){}publicvoid去蓝翔(){}}class你自己{publicstaticvoidarg(StringXXX){录取通知书清华=new录取通知书();清华.去清华();}}可以说这就是一个学霸考完试想的,是能去清华还是能去蓝翔,通知书下来了学霸开始选!择首先我觉得在没选择之前心里想的都是抽象的,选择完毕之后才等于实现。我觉得你们都太在意代码了,代码是写的看看的并不是真要用的
解决方案九:
引用4楼zzq19860626的回复:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。
好吧,看了回复我觉得我从理解上就走向了误区
解决方案十:
一般情况下,名词是对象,动词是方法,但这应该是“面向对象”吧。抽象的话应该类似于“生物”的概念吧。
解决方案十一:
不是很正确,likethis:abstractclass装系统{publicabstractvoid装系统方法();}publicclassU盘装系统extends装系统{publicvoid装系统方法(){//实现用U盘装系统}}publicclass光盘装系统extends装系统{publicvoid装系统方法(){//实现用光盘装系统}}publicclassGhost系统extends装系统{publicvoid装系统方法(){//实现用用Ghost还原系统}}抽象类是多态的一种,对调用者来说,也就是对电脑城的客户来说,他需要一个“装系统”的对象,对他来说,只关对象有“装系统方法”,具体怎么实现,由子类确定。
解决方案十二:
引用10楼hemowolf的回复:
不是很正确,likethis:abstractclass装系统{publicabstractvoid装系统方法();}publicclassU盘装系统extends装系统{publicvoid装系统方法(){//实现用U盘装系统}}publicclass光盘装系统extends装系统{publicvoid装系统方法(){//实现用光盘装系统}}publicclassGhost系统extends装系统{publicvoid装系统方法(){//实现用用Ghost还原系统}}抽象类是多态的一种,对调用者来说,也就是对电脑城的客户来说,他需要一个“装系统”的对象,对他来说,只关对象有“装系统方法”,具体怎么实现,由子类确定。
非常感谢
解决方案十三:
引用7楼Anderson221317的回复:
Quote: 引用4楼zzq19860626的回复:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。比如张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三李四都叫人呢是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。张三李四----》抽象----》人对象<------抽象------->类方法对类的能力的描述,人---吃饭;属性是对类象的特征描述,四肢,一个脑袋总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词;再看你上面的问题:1、一个类名字能叫”装系统“这个就很不合适,2、修电脑的是个体,应该叫维修员代表一类3、装系统是方法不是一个类4、class修电脑的extends张三的电脑你这个表示什么,莫非给人安装了电脑的脑子?人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。5、张三的电脑张三这些都是具体可观存在,是对象不是类应该是张三=new人();如果张三是维修人员那么张三=new维修人员();好好看书好好理解,你这全都不对。那个class装系统代表的是人遇到问题所想的,就像如果你遇到问题,首先想的就是怎么解决,我这个就是在电脑系统坏掉之后想到了三种解决方法,但是三种必须选一种来实现。就好像高中毕业选大学一样,是选清华还是选蓝翔都是心里想到,而具体去哪里要看自己。class选学校{publicvoid去清华();publicvoid去蓝翔();}class录取通知书extends{publicvoid去清华(){}publicvoid去蓝翔(){}}class你自己{publicstaticvoidarg(StringXXX){录取通知书清华=new录取通知书();清华.去清华();}}可以说这就是一个学霸考完试想的,是能去清华还是能去蓝翔,通知书下来了学霸开始选!择首先我觉得在没选择之前心里想的都是抽象的,选择完毕之后才等于实现。我觉得你们都太在意代码了,代码是写的看看的并不是真要用的
有这样的代码就有这样的思维,这思维就不对。
解决方案十四:
看来还不值楼主一个人不会面向对象编程,估计很多事学C过来的吧
解决方案十五:
引用5楼Anderson221317的回复:
Quote: 引用3楼cyf282501的回复:
从头再学吧,一窍不通修电脑有3个抽象方法,你现在只有一个,其他两个不去实现的话,是不行的我这个只是看我对抽象的理解对不对,并不是主写代码,主要是看对抽象的理解
代码就是理解的体现,我要说的是,抽象是用来定义规范的,你既然定义了三个抽象方法,这就是一种规范,是必须要去实现的,这也是抽象的作用“定义规范”
解决方案:
/*修电脑的方法*/abstractclasswaysOfRepairPC{//重装系统方法有很多,所有方法统一抽象成一个抽象方法way(此处是根据楼主的意思写的,细细想来应该是一个属性标识就可以,子类中构造时赋予不同值)publicabstractvoidway();}classUSBWayextendswaysOfRepairPC{//第一种方法:U盘安装,这是对抽象的安装系统方法的一个具体实现publicvoidway(){System.out.println("U盘装系统");}}classCDWayextendswaysOfRepairPC{//第二种方法:光盘安装,这是对抽象的安装系统方法的又一个具体实现publicvoidway(){System.out.println("光盘装系统");}}classGhostWayextendswaysOfRepairPC{//第三种方法:Ghost安装,这是对抽象的安装系统方法的最后一个具体实现publicvoidway(){System.out.println("Ghost装系统");}}/*张三来修电脑问题,这里不是继承关系,而应该是合成关系*/classMan{privateStringname;privatewaysOfRepairPCway;publicMan(Stringname,waysOfRepairPCway){this.name=name;this.way=way;}}publicclassTest{publicstaticvoidmain(String[]args){ManzhangSan=newMan("zhangsan",newUSBWay());//张三是一个修电脑的人,他会的修电脑方法是U盘安装ManliSi=newMan("lisi",newCDWay());//李四是一个修电脑的人,他会的修电脑方法是光盘安装}}
我的理解新毕业的程序员有错的请各位指正
解决方案:
引用15楼u012171905的回复:
/*修电脑的方法*/abstractclasswaysOfRepairPC{//重装系统方法有很多,所有方法统一抽象成一个抽象方法way(此处是根据楼主的意思写的,细细想来应该是一个属性标识就可以,子类中构造时赋予不同值)publicabstractvoidway();}classUSBWayextendswaysOfRepairPC{//第一种方法:U盘安装,这是对抽象的安装系统方法的一个具体实现publicvoidway(){System.out.println("U盘装系统");}}classCDWayextendswaysOfRepairPC{//第二种方法:光盘安装,这是对抽象的安装系统方法的又一个具体实现publicvoidway(){System.out.println("光盘装系统");}}classGhostWayextendswaysOfRepairPC{//第三种方法:Ghost安装,这是对抽象的安装系统方法的最后一个具体实现publicvoidway(){System.out.println("Ghost装系统");}}/*张三来修电脑问题,这里不是继承关系,而应该是合成关系*/classMan{privateStringname;privatewaysOfRepairPCway;publicMan(Stringname,waysOfRepairPCway){this.name=name;this.way=way;}}publicclassTest{publicstaticvoidmain(String[]args){ManzhangSan=newMan("zhangsan",newUSBWay());//张三是一个修电脑的人,他会的修电脑方法是U盘安装ManliSi=newMan("lisi",newCDWay());//李四是一个修电脑的人,他会的修电脑方法是光盘安装}}我的理解新毕业的程序员有错的请各位指正
URcorrect
解决方案:
抽象类感觉还是用的比较少,抽象方法必须定义在抽象类中
解决方案:
抽象就是把若干实体的共同的特性或行为抽出来,放到一起。是一种建模的手段。像你说的这些修电脑的流程,是因为他们都有这些过程,你脑子里想出这些步骤的脑力劳动就是抽象的过程。而不是具体的实现上。至于java中的抽象类,只要知道有没实现的方法要子类实现就好了,不用执着于这些术语的理解
解决方案:
看2L,修电脑就是抽象的,至于修哪个部位,就是继承抽象(修电脑)的一个实现(修电脑的主板).
解决方案:
两个月....水
解决方案:
人类<--张三,但张三会抽烟,那么人类应该定义成抽象类,而抽烟应该是一个接口,这个张三继承了人类,有人的基础行为,而且他还会抽烟,继承一般要抽象出最基本的功能,为了实现复用,关系式is-a,而接口是像一个islikea,他像一个人类,因为他有自己的行为,甚至覆写了人类某些特性,比如他可能手上了,少了一只手。接口是功能性的,表述性的,你实现完了,他就有这个功能,讲的是一个点。抽象类,是贯穿性的,是一条线,总领全局。
解决方案:
你这个还是用接口比较好
解决方案:
用抽象又不如用接口,抽象就好像,你给别人一件衣服的图纸,然后他就照着这样做出来,,相当于一个模板,,只不过这个模板实现不了功能,只有拥有这个模板的人才能实现