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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谢洋 于 2013-2-25 10:38 编辑

//子类继承父类的所有成员(包括私有),
//但没有继承父的的构造函数(因为子类必须调用父类的构造函数完成自身的初始化)
//请看下面的代码
class Person //父类
{

        private String name;//私有的
        private int age;
        
        public void setName(String name)
                {
                            this.name = name;
                }

        public void setAge(int age)
                {
                        this.age = age;        
                }
               
        public int getAge(){return age;}
        public String getName(){return name;}

}

class Stutents extends Person
{
               private String school;
               public String getSchool(){return school;}

                public void setSchool(String school)
                {
                                this.school = school;        
                }        
}

public class TestPerson
{

        public static void main(String args[])
        {
                Stutents stutents = new Stutents();
                stutents.setName("johh");
                stutents.setAge(18);

                stutents.setSchool("SCH");
           //如果说age没有被继承,age只是通过父类public方法来获得,但是现并没父类的 实例对象,那么age是从哪来的?
                System.out.println(stutents.getAge());
                System.out.println(stutents.getName());
                System.out.println(stutents.getSchool());
        }

}

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

4 个回复

倒序浏览
个人理解。
子类要创建对象,首先是父类完成构造函数初始化,也就是父类也会先创建对象,只是这个对象只能通过子类的方法使用。只有有了父类,才会有子类。创建了父类,也就有了它的私有成员。
子类只是不能直接操作父类的私有变量,但是通过继承父类的public方法还是可以使用父类的私有变量的!

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
楼上讲的挺靠谱的  子类中肯定在调用父类的构造方法(super()),也就是说子类在实例化自己的时候,是要new 父类的对象,并存于自己的空间中,所以说父类的对象还是有的,它通过public方法对外提供该字段的访问    虽然可以访问该字段,但是由于该字段本身是私有的   若使用 父类的对象.字段值 是不可见的

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
先说继承概念,Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
注意:不能选择性地继承父类,其实子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。
那么new Stutents()时,就会在内存中开辟空间,其实此时分配了两个属性空间,一个装的是子的属性,一个装的是父的属性,只是不能被子类访问罢了;

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
子类是继承了父类的所有成员,public ,private,protected,在父类中的构造函数若想要子类能够调用就不能把函数封装成private,这就涉及到访问权限和使用权限的问题,举个例子吧,某某的父亲是A这个名字,这肯定是私有的,现在生了某某,某某能够知道他父亲的名字A,但不能使用A,那就是大逆不道。举这个例子只是想说明Java语言来源于生活,但又抽象于生活。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马