黑马程序员技术交流社区

标题: 集合框架中的一个小问题 [打印本页]

作者: 满兴旺    时间: 2014-4-17 22:07
标题: 集合框架中的一个小问题
本帖最后由 满兴旺 于 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()方法来访问啊。。。
                                                                                                                    为什么这里可以直接访问????
作者: 松毛    时间: 2014-4-17 22:16
私有成员变量在本类中是可以访问的,你要是在别的类中的话就需要使用get方法来获取。
作者: Up↑Lee↗    时间: 2014-4-17 22:19
这不是在本类中么,可以的

作者: 满兴旺    时间: 2014-4-17 22:19
本帖最后由 满兴旺 于 2014-4-17 22:24 编辑
松毛 发表于 2014-4-17 22:16
私有成员变量在本类中是可以访问的,你要是在别的类中的话就需要使用get方法来获取。 ...

Student stu=(Student)obj;

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

只要在同一个类中就可以吗??比如同一个类的对象1调用对象2,同样也可以访问对象2的私有变量?
作者: 2528870651    时间: 2014-4-18 08:49
私有化的问题。
private 类访问权限:本类内部可以访问,不能继承到子类;
default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;
protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
public 公共访问权限:任何地方都可以访问,能继承到子类;


你现在是在本类中访问
作者: 种一棵树    时间: 2014-4-18 09:16
本类中当然可以访问,对象内的成员方法调用成员变量,这个是没有问题的嘛。private私有只是对外部而言。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2