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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

父类中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();
               
        }
}

8 个回复

倒序浏览
你可以通过一个外接口访问,比如public String getName(){return name}
回复 使用道具 举报
用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+"。");
        }       
}
回复 使用道具 举报
选中那些私有变量,右击选择source再点generate,再把那几个都选中就会自动生成
回复 使用道具 举报
其实我觉得你在问问题时,可以先搜索一下,因为你这个问题已经有挺多人问过了,
子类可以继承父类的所有成员跟方法,继承下来不代表可以访问,要访问得看访问控制规则。私有属性也可以继承,不过根据访问控制规则,私有属性虽继承下来却不可以访问的,只有通过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 ());
               
        }
}
回复 使用道具 举报
可以通过反射,首先通过Class.forName("类名"),或者类名.getClass()或者对象名.class得到类的字节码文件,然后通过暴力反射得到该属性,最重要是要设置setAcessible(true).就可以获取并设置私有属性了
回复 使用道具 举报
袁野 黑马帝 2012-3-24 18:59:44
7#
呵呵 可以对私有的成员 像外界提供一个公共的get()方法。就可以被访问到了
回复 使用道具 举报
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:09
9#
private修饰符:
private可以修饰变量、构造器,方法、内部类;在变量前面加private 表示类的私有属性,只可以在类内部访问使用;
要想在别的类里面调用private修饰的变量,可以在方法里面定义个获取私有变量的方法就行,然后把这个方法定义为public修饰符就行。在开发中一般变量都是private修饰,然后通过set方法和get方法得到。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马