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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 满兴旺 中级黑马   /  2014-4-17 22:07  /  1129 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 满兴旺 于 2014-4-17 22:44 编辑

复制代码

/*
每一个学生都有对应的归属地。
学生Student 地址String
*/

import java.util.*;

class Student implements Comparable<Student>
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }

        public String toString()
        {
                return name+"..."+age;
        }
/*********************/
        public int hashCode()
        {
                return name.hashCode()+age*34;
        }

        public boolean equals(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new RuntimeException("类型不匹配");
                else{
                        Student stu=(Student)obj;

                        return (this.name==stu.getName() && this.age==stu.age);//age不是私有的吗?应该用getAge()方法来访问啊。。。
                                                                                                                    为什么这里可以直接访问????
                }
        }
/**************************/
        public int compareTo(Student stu)
        {
                int num=new Integer(this.age).compareTo(stu.getAge());
                if(num==0)
                {
                        return this.name.compareTo(stu.getName());
                }
                return num;
        }
}

class MapTest
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static void main(String[] args)
        {
                HashMap<Student,String> hm=new HashMap<Student,String>();

                hm.put(new Student("lisi1",21),"北京");
                hm.put(new Student("lisi1",21),"保定");
                hm.put(new Student("lisi2",22),"北京");
                hm.put(new Student("lisi3",22),"北京");
                hm.put(new Student("lisi4",23),"北京");
               
                //第一种取出
                sop("第一种取出方式");
                Set<Student> keySet=hm.keySet();

                Iterator<Student> it=keySet.iterator();

                while(it.hasNext())
                {
                        Student stu=it.next();
                        String address=hm.get(stu);

                        sop(stu.toString()+"..."+address);
                }
        }
}

问题在代码中 return (this.name==stu.getName() && this.age==stu.age);
age不是私有的吗?应该用getAge()方法来访问啊。。。
                                                                                                                    为什么这里可以直接访问????

8 个回复

倒序浏览
私有成员变量在本类中是可以访问的,你要是在别的类中的话就需要使用get方法来获取。
回复 使用道具 举报
这不是在本类中么,可以的
回复 使用道具 举报
本帖最后由 满兴旺 于 2014-4-17 22:24 编辑
松毛 发表于 2014-4-17 22:16
私有成员变量在本类中是可以访问的,你要是在别的类中的话就需要使用get方法来获取。 ...

Student stu=(Student)obj;

obj不是传进来的吗???而不是用this调用
回复 使用道具 举报
哎??话说我提问了为什么不给我加分呢??
回复 使用道具 举报
私有成员变量在本类中是可以访问的,你要是在外部类中的话使用get方法来获取。
回复 使用道具 举报
muma 发表于 2014-4-17 22:27
私有成员变量在本类中是可以访问的,你要是在外部类中的话使用get方法来获取。 ...

只要在同一个类中就可以吗??比如同一个类的对象1调用对象2,同样也可以访问对象2的私有变量?
回复 使用道具 举报
私有化的问题。
private 类访问权限:本类内部可以访问,不能继承到子类;
default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;
protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
public 公共访问权限:任何地方都可以访问,能继承到子类;


你现在是在本类中访问
回复 使用道具 举报
本类中当然可以访问,对象内的成员方法调用成员变量,这个是没有问题的嘛。private私有只是对外部而言。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马