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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风爽 中级黑马   /  2013-6-2 11:03  /  1581 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 风爽 于 2013-6-2 16:34 编辑

在继承父类时,子类不能直接操作父类中private修饰的变量,但还会给这些变量分配内存空间,就这样来说,子类是继承了父类的private变量,还是没有继承?如果没有继承,为什么还会分配内存空间?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

7 个回复

正序浏览
父类的属性和方法被private修饰时,子类不能直接使用,可以通过set设置和get方法获取
继承中变量的特点:

         1>如果子类出现非私有的同名变量、方法时,子类要访问本类的变量用this,要访问父类中的变量用super

继承中的函数:

        1>当子类出现和父类一摸一样的函数时,当子类调用该函数时,会运用子类的函数内容

继承中构造函数:

        1>在对子类的对象进行初始化时,父类的构造函数也会执行,因为子类的构造函数的第一行默认有一条隐式的super()语句;

        2>super()  一定定义在子类的构造函数中

       3>当父类的没有空参构造函数时,子类必须通过super语句()形式来制定要访问类中的构造函数;

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
楼主:
1、子类继承父类的属性和方法,但是当父类的属性被private修饰时,不能被子类直接使用。通常情况下,父类中有了呗private修饰的成员,都会对外提供访问方法,以供其他类间接使用。
2、子类在继承父类方法时,子类通过方法访问private属性。分配内存时,肯定要分配的,因为会间接使用到。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
      父类中声明为private的变量与方法不能被子类继承(访问)。这个变量可以和子类成员变量重名,虽然不会被子类继承,但是这个成员变量在子类创建时是存在的,子类可以用父类成员方法调用它。父类成员变量不可见,不继承不代表不存在。
     下面是个小例子, 如果子类没有重写getFirstName() ,son.getFirstName()会调用父类方法访问父类private String firstName。
结果是:
  儿子叫 David Smith
  父亲叫 Bob Smith
第一个名字:Bob

   如果子类重写了getFirstName(),son.getFirstName()访问的是子类的firstName,父类的私有成员变量就访问不到了。
结果是
儿子叫 David Smith
父亲叫 Bob Smith
第一个名字:David

public class Gooden {
            public static void main(String[]args){
                Son son=new Son();
                System.out.println("儿子叫 "+son.firstName+" "+son.lastName);
                Father father=new Father();
                System.out.println("父亲叫 "+father.getFirstName()+" "+father.lastName);   
                System.out.println("第一个名字:"+son.getFirstName());
            }
        }

        class Father{
            private String firstName="Bob";
            String lastName="Smith";//父亲类
            public String getFirstName(){
                return firstName;
            }
        }
        class Son extends Father{//儿子类
            String firstName="David";
            public String getFirstName(){
                  return firstName;
            }
        }




评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
父类中的方法可能用到了private修饰的变量,子类继承后调用父类方法时也就可能用到其中的变量,所以子类继承了private变量。
继承机制规定,子类可以拥有超类的所有属性和方法所以是要分配内存空间的。

回复 使用道具 举报
youngster 发表于 2013-6-2 11:10
父类中的方法可能用到了private修饰的变量,
子类继承后调用父类方法时也就可能用到其中的变量,
所以子类 ...

根据你的说法,那么private方法呢,子类也不能调用,但在方法区还是会有它的空间
回复 使用道具 举报
肯定继承了,变量被private修饰,只是限定了变量的访问权限,表示该变量是自己类私有的,不能被其他类包括自己的子类访问。
如果一定要访问私有变量,可以通过类中的成员方法访问。
回复 使用道具 举报
父类中的方法可能用到了private修饰的变量,
子类继承后调用父类方法时也就可能用到其中的变量,
所以子类继承了private变量。
继承机制规定,子类可以拥有超类的所有属性和方法
所以是要分配内存空间的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马