A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈壹 中级黑马   /  2013-6-15 11:46  /  1458 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈壹 于 2013-6-15 18:47 编辑

在自学课程第七天,面向对象基础中有两节讲属性。跟着视屏打代码。在第一次定义person类age属性时

int age;
public int Age{get{return age};set{if (value > 0) { Age = value; } else { age = 0; }}

如上面代码所示,我在set中Age打错为大写,当然程序出错,错误也很快就排除了
但是之后我又试着在公用属性Age中让所有的age都换成Age,将字段age完全废弃

public int Age{get{return Age};set{if (value > 0) { Age = value; } else { Age = 0; }}
不过程序依然报错,一时难明为什么错误,请教各位

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

6 个回复

倒序浏览
你这样写就进入了死循环啊,形成了递归
你声明了一个类的对象后,给Age属性赋值时
进入属性内部的两个get和set方法
get方法返回的还是Age这个属性,而不是字段的值
所以就形成了无限循环...

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
属性其实也可以说是方法的一种,需要返回值,而你在程序段里出现属性名,直接赋值,是要报错的,就像你给一个方法名赋值一样,程序会出错

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
高腾 发表于 2013-6-15 12:18
你这样写就进入了死循环啊,形成了递归
你声明了一个类的对象后,给Age属性赋值时
进入属性内部的两个get和 ...

:funk:,原来是这样。。终于理顺了,谢谢
回复 使用道具 举报
popoluno 发表于 2013-6-15 12:58
属性其实也可以说是方法的一种,需要返回值,而你在程序段里出现属性名,直接赋值,是要报错的,就像你给一 ...

略抽象,不过结合你楼上的内容算是看明白了,谢谢
回复 使用道具 举报
sdjngl123 发表于 2013-6-15 12:59
属性名不能与属性实现代码里的变量同名,你这种写法是错误的
可以这么写: ...

正确的写法我知道,只是当时不了解在set中写Age为什么不行,现在理顺了
回复 使用道具 举报
高腾 中级黑马 2013-6-15 19:24:24
7#
陈壹 发表于 2013-6-15 18:43
,原来是这样。。终于理顺了,谢谢

呵呵~一起学习
有缘的话咱们8期见,加油
前天才报名,现在在赶写blog进入下个环节
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马