黑马程序员技术交流社区

标题: 请教一个问题。。。父类private的成员变量该怎么访问 [打印本页]

作者: 常万    时间: 2012-3-24 15:39
标题: 请教一个问题。。。父类private的成员变量该怎么访问
父类中private修饰的成员变量可以被子类所继承吗?如果我需要在主函数打印这个private修饰的变量该怎么做?
abstract class YuanGong
{
        public String name;
        //private 私有成员不能被访问
        private String id;
        private double pay;
        YuanGong(String name,String id,double pay)
        {
                this.name = name;
                this.id = id;
                this.pay = pay;
        }
       
        abstract public void work();
       


}
class PuTong extends YuanGong
{
        PuTong(String name,String id,double pay)
        {
                super(name,id,pay);
        }
       
        public void work()
        {
                System.out.println("普通员工工作");
        }
        public void show()
        {       
               
        }
}
class  test
{
        public static void main(String[] args)
        {
                YuanGong yg = new PuTong("zhangsan","001",2000);       
                yg.work();
               
        }
}

作者: 蒙武辉    时间: 2012-3-24 15:51
你可以通过一个外接口访问,比如public String getName(){return name}

作者: 庞子华    时间: 2012-3-24 15:53
用get()set()函数
class Student
{
        private String name;
        private int age;
        private float score;
        public String getName()
        {
                return name;
        }
        public void setName(String name)
        {
                this.name = name;
        }
        public int getAge()
        {
                return age;
        }
        public void setAge(int age)
        {
                this.age = age;
        }
        public float getScore()
        {
                return score;
        }
        public void setScore(float score)
        {
                this.score = score;
        }
        //定义构造函数
        public Student(String name,int age,float score)
        {
                this.name=name;
                this.age=age;
                this.score=score;
        }
        //显示学生信息函数
        public void Show()
        {
                System.out.println("姓名:"+this.name+"  年龄:"
                       +this.age+" 分数: "+this.score+"。");
        }       
}
作者: 庞子华    时间: 2012-3-24 15:58
选中那些私有变量,右击选择source再点generate,再把那几个都选中就会自动生成
作者: adison    时间: 2012-3-24 16:02
其实我觉得你在问问题时,可以先搜索一下,因为你这个问题已经有挺多人问过了,
子类可以继承父类的所有成员跟方法,继承下来不代表可以访问,要访问得看访问控制规则。私有属性也可以继承,不过根据访问控制规则,私有属性虽继承下来却不可以访问的,只有通过public的方法访问继承下来的私有属性。
你代码加上两方法就可以了
abstract class YuanGong
{
        public String name;
        //private 私有成员不能被访问
        private String id;
        private double pay;
        YuanGong(String name,String id,double pay)
        {
                this.name = name;
                this.id = id;
                this.pay = pay;
        }
        
        abstract public void work();
       public void setName(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        


}
class PuTong extends YuanGong
{
        PuTong(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        
        public void work()
        {
                System.out.println("普通员工工作");
        }
        public void show()
        {        
               
        }
}
class  test
{
        public static void main(String[] args)
        {
                YuanGong yg = new PuTong("zhangsan","001",2000);        
                yg.work();
                //yg.setName ("zhangsan");
                System.out.println(yg.getName ());
               
        }
}
作者: 和心愿    时间: 2012-3-24 18:08
可以通过反射,首先通过Class.forName("类名"),或者类名.getClass()或者对象名.class得到类的字节码文件,然后通过暴力反射得到该属性,最重要是要设置setAcessible(true).就可以获取并设置私有属性了
作者: 袁野    时间: 2012-3-24 18:59
呵呵 可以对私有的成员 像外界提供一个公共的get()方法。就可以被访问到了
作者: 邓飞飞    时间: 2012-3-24 19:47
abstract class YuanGong
{
         public String name;
         private String id;
         private double pay;
         YuanGong(String name,String id,double pay)
         {
                 this.name = name;
                 this.id = id;
                 this.pay = pay;
         }
         
         abstract public void work();//正如你说的类中私有的变量是不容许别的类来调用的,但是可以被自己类中的方法所使用,既然这样
                                                                          那只要在本类中定义一个能既能获取本类中的私有成员又能被其它类调用的方法即可。

   public void setName(String name)
         {
                 this.name=name;
         }
         public String getName()
         {
                 return name;
         }

         


}
class PuTong extends YuanGong
{
         PuTong(String name,String id,double pay)
         {
                 super(name,id,pay);
         }
         
         public void work()
         {
                 System.out.println("普通员工工作");
         }
         public void show()
         {        
                 
         }
}
class  test
{
         public static void main(String[] args)
         {
                 YuanGong yg = new PuTong("zhangsan","001",2000);        
                 yg.work();
                 yg.getName();//就可以得到想要的名字了
         }
}
作者: 冯建鹏    时间: 2012-3-24 20:26
private修饰符:
private可以修饰变量、构造器,方法、内部类;在变量前面加private 表示类的私有属性,只可以在类内部访问使用;
要想在别的类里面调用private修饰的变量,可以在方法里面定义个获取私有变量的方法就行,然后把这个方法定义为public修饰符就行。在开发中一般变量都是private修饰,然后通过set方法和get方法得到。




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