黑马程序员技术交流社区

标题: 子类中能不能继承父类的私有变量和方法吗吗 [打印本页]

作者: 邵阳    时间: 2012-11-20 21:16
标题: 子类中能不能继承父类的私有变量和方法吗吗
本帖最后由 邵阳 于 2012-11-22 20:34 编辑

子类中能不能继承父类的私有变量吗
class a
{
private int x;
private String y;
privatr void write()
{}
}
class c extends a
{

}
作者: 奚华    时间: 2012-11-20 21:32
可以继承,但是继承后在子类中不能直接访问!
作者: 金鑫    时间: 2012-11-20 21:34
private关键字所修饰的成员被封装之后,只在本来中被访问,目的是不希望被外界所访问。如果能被子类继承后访问的话,就打破了封装性了,所以是不能被直接访问的。
如果想访问父类中私有的成员,就在父类中定义一个方法,在方法中将父类中北封装的对象返回,让外界访问
public int getInt()
{
     return x;
}
public String  getString()
{
     return y;
}

当父类中的方法用private来修饰时,子类无法重写。如果子类中有一个方法与父类方法名相同,参数列表以及返回值都相同,依然不是重写,只是在子类中重新定义了一个方法,可以加static关键字。
比如你的例子中,在子类也定义了一个方法privatr void write(){},他与父类无关,只是在子类中定义了一个与父类一样的方法而已,但是不是重写,更不是从父类继承过来的

作者: 王震阳老师    时间: 2012-11-20 21:43
楼主的问题是子类是否可以继承父类的private修饰的成员变量和方法。答案是唯一的:不能继承父类的私有变量和方法。这是private限制的缘故。
作者: 张硕    时间: 2012-11-20 21:51
子类不能继承父类私有成员变量,只能通过继承父类后调用里面的成员方法来读、写成员变量,而父类里面的成员方法一般定义为public的,作为封装后对外的接口,如果也定义成私有的private,那么也不能被子类调用
作者: 杜正冬    时间: 2012-11-20 22:11
私有变量需要对外提供访问方式

子类通过get或set方法访问  如果有子类继承下面的代码 就可以通过get和set方法访问


package com.itheima;

public class Test5 {

        /**
         * 题目:定义一个学生类, 需要有姓名, 年龄, 考试成绩三个成员属性.
         *  属性(成员变量)需要私有并提供get, set方法, 可以通过构造函数进行初始化.
         */
        private String StudentName; // 学生姓名
        private int StudentAge; // 学生年龄
        private String StudentScore; // 考试成绩
        //空参数的构造函数
        public Test5() {

        }
        //构造方法
        public Test5(String studentName, int studentAge, String studentScore) {
                super();
                StudentName = studentName;
                StudentAge = studentAge;
                StudentScore = studentScore;
        }

        public String getStudentName() {
                return StudentName;
        }

        public void setStudentName(String studentName) {
                StudentName = studentName;
        }

        public int getStudentAge() {
                return StudentAge;
        }

        public void setStudentAge(int studentAge) {
                StudentAge = studentAge;
        }

        public String getStudentScore() {
                return StudentScore;
        }

        public void setStudentScore(String studentScore) {
                StudentScore = studentScore;
        }
        public static void main(String []args){
                Test5 t=new Test5("张三",20,"优秀");//初始化
                System.out.println("----姓名:"+t.StudentName+"----年龄:"+t.StudentAge+"-----成绩:"+t.StudentScore+"-----");
        }
}

作者: 王斌    时间: 2012-11-22 13:26
子类继承父类的方法,但是不能继承父类被private 修饰的方法和变量,这和访问的权限有关,
public class A {
    private int test = 1;

    class B extends A {
        public int test = 2;

        public B(int test) {
            System.out.println(super.test);
            System.out.println(this.test);
            System.out.println(test);
        }
    }

    public static void main(String[] args) {
        new A().new B(3);
    }
}
作者: 卞潇洋    时间: 2012-11-22 13:57
子类中能不能继承父类的私有变量,答案是肯定不能继承的,private只能供它本类使用,如果继承以后,违反了面向对象的原则,楼主可以看看private、protected、public以及final之间的区别




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