黑马程序员技术交流社区
标题:
为什么总有人说子类没有继承父类的私有成员?
[打印本页]
作者:
谢洋
时间:
2013-1-30 14:23
标题:
为什么总有人说子类没有继承父类的私有成员?
本帖最后由 谢洋 于 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());
}
}
作者:
黄成超
时间:
2013-1-30 16:34
个人理解。
子类要创建对象,首先是父类完成构造函数初始化,也就是父类也会先创建对象,只是这个对象只能通过子类的方法使用。只有有了父类,才会有子类。创建了父类,也就有了它的私有成员。
子类只是不能直接操作父类的私有变量,但是通过继承父类的public方法还是可以使用父类的私有变量的!
作者:
王立浩
时间:
2013-1-30 17:07
楼上讲的挺靠谱的 子类中肯定在调用父类的构造方法(super()),也就是说子类在实例化自己的时候,是要new 父类的对象,并存于自己的空间中,所以说父类的对象还是有的,它通过public方法对外提供该字段的访问 虽然可以访问该字段,但是由于该字段本身是私有的 若使用 父类的对象.字段值 是不可见的
作者:
念满
时间:
2013-1-31 13:06
先说继承概念,Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
注意:不能选择性地继承父类,其实子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。
那么new Stutents()时,就会在内存中开辟空间,其实此时分配了两个属性空间,一个装的是子的属性,一个装的是父的属性,只是不能被子类访问罢了;
作者:
钱志新
时间:
2013-1-31 21:08
子类是继承了父类的所有成员,public ,private,protected,在父类中的构造函数若想要子类能够调用就不能把函数封装成private,这就涉及到访问权限和使用权限的问题,举个例子吧,某某的父亲是A这个名字,这肯定是私有的,现在生了某某,某某能够知道他父亲的名字A,但不能使用A,那就是大逆不道。举这个例子只是想说明Java语言来源于生活,但又抽象于生活。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2