我对抽象的理解

Anderson221317 2014-11-27 11:48:58
新人一个,学java两个多月了,说说我对抽象的理解。
假设电脑系统坏了,那么我们脑中首先想的就是解决方法,这时脑中想的解决方法就是抽象的如:
class 装系统
{
public abstract void 修电脑方法_U盘();
public abstract void 修电脑方法_光盘();
public abstract void 修电脑方法_ghost镜像();

}
如上我们想到了三种安装系统的方法,一种是需要系统光盘,一种是需要一个做成启动项的U盘,并且里面有win7的镜像,一种是需要电脑中非系统盘符内写有win7系统的镜像,并且电脑内有一键ghost; 那么我们开始找所需要的装系统工具,目前找到的工具只有一个U盘,U盘内与上述符合,那么开始用U盘装系统。代码如下:
class U盘装系统 extends 装系统
{
public abstract void 修电脑方法_U盘()
{
将U盘插入电脑;
找到镜像装系统;
安装完毕;
}

}
如上所写:我认为抽象放到现实生活就是,发生了一些问题需要你解决,你当时想的解决方法就是抽象到,当你按照你脑中那个方法做的时候就等于将抽象方法实现了,再举个例子:你的电脑坏了需要修理,你心里就想到了解决方法(abstract),然后你就用想到的方法去修理(实现)。
其实人就是一个抽象与实现的个体,如果发生一件事,你自己能解决就等于你自己把抽象方法实现了。如果自己解决不了就找到其他实现了此类抽象方法的人。
还拿修电脑说事:
class 张三
{
public void 吃饭;
public void 喝水;
}
class 张三的电脑
{
//张三没有这功能所以
public abstract void 修理();

}
class 修电脑的 extends 张三的电脑
{

public abstract void 找到毛病修理()
{

电脑 r=修理();
}
private 电脑 修理 ()
{
修理完毕();
return 修完的电脑;
}
}
请大神点评理解的对不对,至于代码小小得了
...全文
745 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
iversonfor2 2014-12-18
  • 打赏
  • 举报
回复
用抽象又不如用接口,抽象就好像,你给别人一件衣服的图纸,然后他就照着这样做出来,,相当于一个模板,,只不过这个模板实现不了功能,只有拥有这个模板的人才能实现
zuilafeng 2014-12-15
  • 打赏
  • 举报
回复
你这个还是用接口比较好
wxw01234 2014-12-11
  • 打赏
  • 举报
回复
抽象就是把若干实体的共同的特性或行为抽出来,放到一起。是一种建模的手段。 像你说的这些修电脑的流程,是因为他们都有这些过程,你脑子里想出这些步骤的脑力劳动就是抽象的过程。而不是具体的实现上。 至于java中的抽象类,只要知道有没实现的方法要子类实现就好了,不用执着于这些术语的理解
yutaoaijingjing132 2014-12-11
  • 打赏
  • 举报
回复
人类<--张三,但张三会抽烟,那么人类应该定义成抽象类,而抽烟应该是一个接口,这个张三继承了人类,有人的基础行为,而且他还会抽烟,继承一般要抽象出最基本的功能,为了实现复用,关系式is-a ,而接口是像一个 is like a ,他像一个人类,因为他有自己的行为,甚至覆写了人类某些特性,比如他可能手上了,少了一只手。 接口是功能性的,表述性的,你实现完了,他就有这个功能,讲的是一个点。 抽象类,是贯穿性的,是一条线,总领全局。
OOCXC 2014-12-11
  • 打赏
  • 举报
回复
两个月....水
OOCXC 2014-12-11
  • 打赏
  • 举报
回复
看2L,修电脑就是抽象的,至于修哪个部位,就是继承抽象(修电脑)的一个实现(修电脑的主板).
Hilter_man 2014-12-03
  • 打赏
  • 举报
回复
抽象类感觉还是用的比较少,抽象方法必须定义在抽象类中
小灰狼 2014-12-02
  • 打赏
  • 举报
回复
引用 15 楼 u012171905 的回复:
/* 修电脑的方法 */
abstract class waysOfRepairPC {
	// 重装系统方法有很多, 所有方法统一抽象成一个抽象方法way(此处是根据楼主的意思写的, 细细想来应该是一个属性标识就可以, 子类中构造时赋予不同值)
	public abstract void way();
}

class USBWay extends waysOfRepairPC {
	// 第一种方法:U盘安装, 这是对抽象的安装系统方法的一个具体实现 
	public void way() {
		System.out.println("U盘装系统");
	}
}

class CDWay extends waysOfRepairPC {
	// 第二种方法:光盘安装, 这是对抽象的安装系统方法的又一个具体实现 
	public void way() {
		System.out.println("光盘装系统");
	}
}

class GhostWay extends waysOfRepairPC {
	// 第三种方法:Ghost安装, 这是对抽象的安装系统方法的最后一个具体实现 
	public void way() {
		System.out.println("Ghost装系统");
	}
}

/* 张三来修电脑问题, 这里不是继承关系, 而应该是合成关系 */
class Man {
	private String name;
	private waysOfRepairPC way;
	
	public Man(String name, waysOfRepairPC way) {
		this.name = name;
		this.way = way;
	}
}

public class Test {
	public static void main(String[] args) {
		Man zhangSan = new Man("zhangsan", new USBWay()); // 张三是一个修电脑的人, 他会的修电脑方法是U盘安装
		Man liSi = new Man("lisi", new CDWay()); // 李四是一个修电脑的人, 他会的修电脑方法是光盘安装
	}
}
我的理解 新毕业的程序员 有错的请各位指正
U R correct
Coder_D 2014-12-02
  • 打赏
  • 举报
回复
/* 修电脑的方法 */
abstract class waysOfRepairPC {
	// 重装系统方法有很多, 所有方法统一抽象成一个抽象方法way(此处是根据楼主的意思写的, 细细想来应该是一个属性标识就可以, 子类中构造时赋予不同值)
	public abstract void way();
}

class USBWay extends waysOfRepairPC {
	// 第一种方法:U盘安装, 这是对抽象的安装系统方法的一个具体实现 
	public void way() {
		System.out.println("U盘装系统");
	}
}

class CDWay extends waysOfRepairPC {
	// 第二种方法:光盘安装, 这是对抽象的安装系统方法的又一个具体实现 
	public void way() {
		System.out.println("光盘装系统");
	}
}

class GhostWay extends waysOfRepairPC {
	// 第三种方法:Ghost安装, 这是对抽象的安装系统方法的最后一个具体实现 
	public void way() {
		System.out.println("Ghost装系统");
	}
}

/* 张三来修电脑问题, 这里不是继承关系, 而应该是合成关系 */
class Man {
	private String name;
	private waysOfRepairPC way;
	
	public Man(String name, waysOfRepairPC way) {
		this.name = name;
		this.way = way;
	}
}

public class Test {
	public static void main(String[] args) {
		Man zhangSan = new Man("zhangsan", new USBWay()); // 张三是一个修电脑的人, 他会的修电脑方法是U盘安装
		Man liSi = new Man("lisi", new CDWay()); // 李四是一个修电脑的人, 他会的修电脑方法是光盘安装
	}
}
我的理解 新毕业的程序员 有错的请各位指正
忘年之 2014-12-02
  • 打赏
  • 举报
回复
引用 5 楼 Anderson221317 的回复:
[quote=引用 3 楼 cyf282501 的回复:] 从头再学吧,一窍不通 修电脑有3个抽象方法,你现在只有一个,其他两个不去实现的话,是不行的
我这个只是看我对抽象的理解对不对,并不是主写代码,主要是看对抽象的理解[/quote] 代码就是理解的体现,我要说的是,抽象是用来定义规范的,你既然定义了三个抽象方法,这就是一种规范,是必须要去实现的,这也是抽象的作用“定义规范”
AceShot 2014-11-27
  • 打赏
  • 举报
回复

class 装系统
{
    public abstract void 修电脑方法_U盘();
    public abstract void 修电脑方法_光盘();
     public abstract void 修电脑方法_ghost镜像();

}
如果用抽象,个人认为如下比较合适

class 装系统
{
    public abstract void 修电脑方法();
}

然后U盘,光盘,ghost三种不同的实现类都继承 Class 装系统,分别实现修电脑方法()这个方法
姜小白- 2014-11-27
  • 打赏
  • 举报
回复
抽象就是抽出像的地方 class 装系统 { public abstract void 修电脑方法_U盘(); public abstract void 修电脑方法_光盘(); public abstract void 修电脑方法_ghost镜像(); } 这个不像类的封装,这个像工厂一样,提供修电脑的几种方式
张自强 2014-11-27
  • 打赏
  • 举报
回复
看来还不值楼主一个人不会面向对象编程,估计很多事学C过来的吧
张自强 2014-11-27
  • 打赏
  • 举报
回复
引用 7 楼 Anderson221317 的回复:
[quote=引用 4 楼 zzq19860626 的回复:] 你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。 比如 张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三 李四都叫人呢 是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。 张三 李四----》抽象----》人 对象<------抽象------->类 方法对类的能力的描述,人 --- 吃饭 ;属性是对类象的特征描述,四肢,一个脑袋 总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词; 再看你上面的问题: 1、一个类 名字能叫” 装系统“ 这个就很不合适, 2、修电脑的 是个体,应该叫维修员代表一类 3、装系统是方法 不是一个类 4、class 修电脑的 extends 张三的电脑 你这个表示什么,莫非给人安装了电脑的脑子? 人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。 5、张三的电脑 张三 这些都是具体可观存在,是对象不是类 应该是 张三 = new 人(); 如果张三是维修人员 那么 张三 = new 维修人员(); 好好看书 好好理解,你这全都不对。
那个class 装系统代表的是人遇到问题所想的,就像如果你遇到问题,首先想的就是怎么解决,我这个就是在电脑系统坏掉之后想到了三种解决方法,但是三种必须选一种来实现。就好像高中毕业选大学一样,是选清华还是选蓝翔都是心里想到,而具体去哪里要看自己。 class 选学校 { public void 去清华(); public void 去蓝翔(); } class 录取通知书 extends { public void 去清华() {} public void 去蓝翔() {} } class 你自己 { public static void arg(String XXX) { 录取通知书 清华=new 录取通知书(); 清华.去清华(); } } 可以说这就是一个学霸考完试想的,是能去清华还是能去蓝翔,通知书下来了学霸开始选!择首先我觉得在没选择之前心里想的都是抽象的,选择完毕之后才等于实现。 我觉得你们都太在意代码了,代码是写的看看的并不是真要用的[/quote] 有这样的代码就有这样的思维,这思维就不对。
Anderson221317 2014-11-27
  • 打赏
  • 举报
回复
引用 10 楼 hemowolf 的回复:
不是很正确,like this: abstract class 装系统 { public abstract void 装系统方法(); } public class U盘装系统 extends 装系统{ public void 装系统方法() { // 实现用U盘装系统 } } public class 光盘装系统 extends 装系统{ public void 装系统方法() { // 实现用光盘装系统 } } public class Ghost系统 extends 装系统{ public void 装系统方法() { // 实现用用Ghost还原系统 } } 抽象类是多态的一种,对调用者来说,也就是对电脑城的客户来说,他需要一个“装系统”的对象,对他来说,只关对象有“装系统方法”,具体怎么实现,由子类确定。
非常感谢
小灰狼 2014-11-27
  • 打赏
  • 举报
回复
不是很正确,like this: abstract class 装系统 { public abstract void 装系统方法(); } public class U盘装系统 extends 装系统{ public void 装系统方法() { // 实现用U盘装系统 } } public class 光盘装系统 extends 装系统{ public void 装系统方法() { // 实现用光盘装系统 } } public class Ghost系统 extends 装系统{ public void 装系统方法() { // 实现用用Ghost还原系统 } } 抽象类是多态的一种,对调用者来说,也就是对电脑城的客户来说,他需要一个“装系统”的对象,对他来说,只关对象有“装系统方法”,具体怎么实现,由子类确定。
little-finger 2014-11-27
  • 打赏
  • 举报
回复
一般情况下,名词是对象 ,动词是方法,但这应该是“面向对象”吧。 抽象的话应该类似于 “生物”的概念吧。
Anderson221317 2014-11-27
  • 打赏
  • 举报
回复
引用 4 楼 zzq19860626 的回复:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。 比如 张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三 李四都叫人呢 是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。 张三 李四----》抽象----》人 对象<------抽象------->类 方法对类的能力的描述,人 --- 吃饭 ;属性是对类象的特征描述,四肢,一个脑袋 总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词; 再看你上面的问题: 1、一个类 名字能叫” 装系统“ 这个就很不合适, 2、修电脑的 是个体,应该叫维修员代表一类 3、装系统是方法 不是一个类 4、class 修电脑的 extends 张三的电脑 你这个表示什么,莫非给人安装了电脑的脑子? 人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。 5、张三的电脑 张三 这些都是具体可观存在,是对象不是类 应该是 张三 = new 人(); 如果张三是维修人员 那么 张三 = new 维修人员(); 好好看书 好好理解,你这全都不对。
好吧,看了回复我觉得我从理解上就走向了误区
Anderson221317 2014-11-27
  • 打赏
  • 举报
回复
引用 4 楼 zzq19860626 的回复:
你这抽象抽的乱七八糟的。抽象是对现实世界共性描述的过程。之所以说面向对象比较好,是因为接近人的思维,更接近我们现实生活。一个类就是描述一类对象,一个对象就有描述对象的属性,以及一个对象所具有的能力体现在方法上面。 比如 张三是人的具体表现,那人就是对张三,李四,...的抽象,张三,李四是具体的可观存在,而人是抽象出来的,不是可观存在,为什么非要张三 李四都叫人呢 是因为符合人特征,人会说话,会吃饭,一个头有四肢,会走路,所以抽象为人,当然如果他们都瘸了,那也可以叫瘸子,因为符合瘸子的特征--腿瘸。这样跟现实很接近。把张三李四叫人的过程叫抽象。张三就是一个具体可观事物,也就是人的具体表现,叫做对象,张三李四抽象成人这个概念,人就是一个类。 张三 李四----》抽象----》人 对象<------抽象------->类 方法对类的能力的描述,人 --- 吃饭 ;属性是对类象的特征描述,四肢,一个脑袋 总结下,一个类一般是名词,属性也一般是名词,方法描述动作行为,一般是动词; 再看你上面的问题: 1、一个类 名字能叫” 装系统“ 这个就很不合适, 2、修电脑的 是个体,应该叫维修员代表一类 3、装系统是方法 不是一个类 4、class 修电脑的 extends 张三的电脑 你这个表示什么,莫非给人安装了电脑的脑子? 人怎么能继承电脑?以为是钢铁侠,给人安装芯片啊,电脑跟人一点关系都没有,怎么会继承,继承是子类要有父类的属性和方法。除非人能当电脑使用,那你这个可以。但是现实中大多数是不可能的。 5、张三的电脑 张三 这些都是具体可观存在,是对象不是类 应该是 张三 = new 人(); 如果张三是维修人员 那么 张三 = new 维修人员(); 好好看书 好好理解,你这全都不对。
那个class 装系统代表的是人遇到问题所想的,就像如果你遇到问题,首先想的就是怎么解决,我这个就是在电脑系统坏掉之后想到了三种解决方法,但是三种必须选一种来实现。就好像高中毕业选大学一样,是选清华还是选蓝翔都是心里想到,而具体去哪里要看自己。 class 选学校 { public void 去清华(); public void 去蓝翔(); } class 录取通知书 extends { public void 去清华() {} public void 去蓝翔() {} } class 你自己 { public static void arg(String XXX) { 录取通知书 清华=new 录取通知书(); 清华.去清华(); } } 可以说这就是一个学霸考完试想的,是能去清华还是能去蓝翔,通知书下来了学霸开始选!择首先我觉得在没选择之前心里想的都是抽象的,选择完毕之后才等于实现。 我觉得你们都太在意代码了,代码是写的看看的并不是真要用的
多木多多木 2014-11-27
  • 打赏
  • 举报
回复
哥们,抽象从本质上说是数学建模。面对一个复杂的业务,如何提取业务模型,这个事需求分析人员的任务。推荐下UML(统一建模语言)之类的教材,那上边对这个有很详细的解释。
加载更多回复(3)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧