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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 布鲁Go 中级黑马   /  2014-1-18 17:07  /  1673 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

子类继承父类的话,父类中private修饰的变量和方法,子类到底能不能访问到呢?如果可以访问到,为什么不能覆盖呢???如果不能访问到,为什么子类在做构造方法的时候,可以直接super(name)(如下第六第七行标红代码)呢,还是说只有被private修饰的变量可以访问,方法不能访问?为什么?
示例:

class Test extends Thread
{
       //private String name;
       Test(String name)
       {
              //this.name = name;
              super(name);
       }
       public void run()
       {
              for(int x=0; x<60; x++)
              {
                     System.out.println((Thread.currentThread()==this)+"..."+this.getName()+"run..."+x);
              }
       }

}

求解。

6 个回复

倒序浏览
陈文杰 来自手机 中级黑马 2014-1-18 17:15:02
沙发
到底哪个是父类,代码呢!
回复 使用道具 举报
private的类、类属变量及方法,包内包外的任何类均不能访问;子类也不可以。
Test(String name)
       {
              //this.name = name;
              super(name);
       }
不是访问父类中name,而是子类的构造方法传入一个name,在去调用父类的构造方法时,将这个name给父类用。。
回复 使用道具 举报
super(name)是访问父类中的有一个String参数的构造函数,不是访问的私有变量
是将子类构造函数接收到的name再作为参数传递给父类有相同参数的构造函数
一个类中的private 成员,其子类是访问不到的
回复 使用道具 举报
陈文杰 发表于 2014-1-18 17:15
到底哪个是父类,代码呢!

这里的父类应该是Thread, 里面有一个Thread(String  name)方法
这个是看视频时候的疑问,现在不是用自己的电脑,所以一下也忘了原来的全部情境。:

我的问题就是这样的。
你可以不看代码。。就看问题。

就假设我在一个类中
:private String name
可是他的子类,不用自己定义一个变量name  ,却直接   super(name),就可以。。


回复 使用道具 举报
wodenhaowzg 发表于 2014-1-18 17:22
private的类、类属变量及方法,包内包外的任何类均不能访问;子类也不可以。
Test(String name)
       {

哦哦,我晕了。。一下迷糊了。。想明白了。
回复 使用道具 举报
private修饰的变量和方法,可以被访问,但是不能直接访问。可以提供公共的访问方法:
private int age;
public void serAge(int a )//公共访问方法
{
      age = a;
}
另外被private修饰的不能被覆盖,因为private修饰对外是隐藏的,你就不知道他,你怎么覆盖;
public int getAge()
{
     return age;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马