黑马程序员技术交流社区

标题: 关于子类法访问父类的权限问题 [打印本页]

作者: 布鲁Go    时间: 2014-1-18 17:07
标题: 关于子类法访问父类的权限问题
子类继承父类的话,父类中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);
              }
       }

}

求解。


作者: 陈文杰    时间: 2014-1-18 17:15
到底哪个是父类,代码呢!

作者: wodenhaowzg    时间: 2014-1-18 17:22
private的类、类属变量及方法,包内包外的任何类均不能访问;子类也不可以。
Test(String name)
       {
              //this.name = name;
              super(name);
       }
不是访问父类中name,而是子类的构造方法传入一个name,在去调用父类的构造方法时,将这个name给父类用。。
作者: §傻、才乖    时间: 2014-1-18 17:24
super(name)是访问父类中的有一个String参数的构造函数,不是访问的私有变量
是将子类构造函数接收到的name再作为参数传递给父类有相同参数的构造函数
一个类中的private 成员,其子类是访问不到的
作者: 布鲁Go    时间: 2014-1-18 17:31
陈文杰 发表于 2014-1-18 17:15
到底哪个是父类,代码呢!

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

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

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



作者: 布鲁Go    时间: 2014-1-18 17:39
wodenhaowzg 发表于 2014-1-18 17:22
private的类、类属变量及方法,包内包外的任何类均不能访问;子类也不可以。
Test(String name)
       {

哦哦,我晕了。。一下迷糊了。。想明白了。
作者: 姬运涛    时间: 2014-1-18 18:00
private修饰的变量和方法,可以被访问,但是不能直接访问。可以提供公共的访问方法:
private int age;
public void serAge(int a )//公共访问方法
{
      age = a;
}
另外被private修饰的不能被覆盖,因为private修饰对外是隐藏的,你就不知道他,你怎么覆盖;
public int getAge()
{
     return age;
}




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