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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*需求:给人定义一个用于比较年龄是否相同的功能,也就是是否是同龄
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这个时候要用到thi

当定义类功能时候,该函数内部要用到调用该函数的对象时,这个时候用到this,this表示这

个对象



*/
class person
{        private String name;
        private int age;
        person(int age)
        {
        this.age=age;
        }


        public boolean compare(person p)
        {
        return this.age==p.age;
               
        }

}

class personDemo
{ public static void main(String[] args)
        {person p1=new person(55);
        person p2=new person(66);
        System.out.println(p1.compare(p2));
        }
}

关于this的问题都明白了:this代表p1也就是代表一个对象,那个对象调用这个方法代表那个对象
关键问题是:为什么这里不能把this去掉,换成p1也就是p1.age==p.age为什么不行?希望详细解答

评分

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

查看全部评分

9 个回复

倒序浏览
本帖最后由 1352107393 于 2015-4-21 13:44 编辑

this表示当前类里的age属性,而p.age是参数对象(p)里的age,p1,p2都是你实例化的对象
如果你用p2.complate(p1);那么那个this就代表p2,p就代表p1。

回复 使用道具 举报
1352107393 发表于 2015-4-21 13:34
this表示当前类里的age属性,而p.age是参数对象(p)里的age,
你那个p1,p2都是实例化的对象
...

p1.age表示什么?为什么p1.age无法调用到已经初始化p1里面的参数age
回复 使用道具 举报
本帖最后由 1352107393 于 2015-4-21 13:47 编辑
728503435 发表于 2015-4-21 13:43
p1.age表示什么?为什么p1.age无法调用到已经初始化p1里面的参数age

private age;
你这定义的私有变量,需要定义setter和getter方法,才能调用的class person
{        private String name;
        private int age;
        person(int age)
        {
        this.age=age;
        }


        public boolean compare(person p)
        {
        return this.age==p.age;
               
        }

     public int getAge(){
      return this.age;
     }  
}
回复 使用道具 举报
1352107393 发表于 2015-4-21 13:46
private age;
你这定义的私有变量,需要定义setter和getter方法,才能调用的class person
{        privat ...

你的回答有问题我的确私有化了没错,可是我在新建对象的时候已经初始化了,在初始化里面我给age赋值了
回复 使用道具 举报
....个人理解。上面封装的是一个函数,是从基础中抽象出来的共性,如果用p1.age替换this的话  你没必要写在外面了。在上面是其他调用起来方便 提高复用性,如果用p1代替this的话就只能用一次了~~~。
回复 使用道具 举报
Oh.Ba 中级黑马 2015-4-21 14:14:37
7#
我觉得一个是初始化,之后的是调用。有所不同
回复 使用道具 举报
不知该说些什么。。。。。。就是谢谢
回复 使用道具 举报
真的很有用,谢谢啦!
回复 使用道具 举报
非常谢谢楼主,顶一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马