关于JAVA中继承的一个问题~!

来源:百度知道 编辑:UC知道 时间:2024/05/25 00:55:33
当父类的成员变量被声明为private时,该变量是不能被子类继承的!那么下面的例子中,子类为什么还拥有父类的属性:name和age?(或者下面的代码是错的?下面的代码是某书上的,本人没有调试~!)

class Person
{
private String name;
private int age;

public Person(){}
public void setNameAge(String name,int age)
{this.name=name;
this.age=age;
}
}

class Student extends Person
{
public Student(){}
}

public class Test
{
public static void main(String[] args)
Student stu=new Student();
stu.setNameAge("张三",21);
}
子类对象stu调用继承的setNameAge()方法时有形参“张三”和21,可是子类并不能继承父类的private成员啊~!

请问2楼的兄台,子类调用继承的setNameAge()方法时,将形参“张三”和21赋给了name age,那么this.name和this.age中的name和age 不是父类的成员变量吗?http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/ExtendParentClass.htm

希望你能耐心看

首先说明

子类继承父类所有属性和方法(private的属性照样继承,只是你不可见),这是书上明确说的 不信你可以看看以下说明 再试试以下代码

1.不要把“是否存在”和“是否可见”混淆.
“子类继承父类所有属性和方法”说的是存在.
“private”是指可见性,就是说,对于stu的实例来说,属性name存在.但不可见(不可访问).

2.子类的对象不能直接访问父类的私有属性或方法,如果你想访问父类的私有属性,则必须通过父类的公有成员函数来访问。(本例中的public void setNameAge(...) 就是公有的函数)

3.其实private只是一个幌子,它并不能阻止父类的private属性在类外被访问。 //回答 火星微生物 问题: 访问父类的私有属性可以通过父类的public函数来访问,因为父类的public可以在类外直接访问..

class Person
{
private String name;
private int age;

public Person(){}
public void setNameAge(String name,int age)
{this.name=name;
this.age=age;
}
public void printNameAge()
{System.out.println(name);
System.out.println(age);
}
}

class Student extends Person
{
public Student(){}
}

public class Test
{
public static void main(String[] args)
{
Student stu=new Student();
stu.setName