可以继承但不可以直接访问。
子类可以继承父类的所有成员跟方法,继承下来不代表可以访问,要访问得看访问控制规则。私有属性也可以继承,不过根据访问控制规则,私有属性虽继承下来却不可以访问的,只有通过public的方法访问继承下来的私有属性。
例如在Person类中,age私有化以后,类以外即使建立了对象了也不能直接访问,需要在Person类中提供对应的访问age的方式。对外提供方法只有两种形式set和get。
这一块毕老师讲的很清楚,建议再看下视频。
class Person
{
private int age;
//把属性都隐藏,提供公共方法对其访问。对外提供方法只有两种形式set和get。
public void setAge(int a)
{
age = a;
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge(45);
p.speak();
}
}作者: adison 时间: 2012-3-14 16:34 本帖最后由 adison 于 2012-3-14 16:46 编辑
同楼上:(代码改了自己的,觉得从输出语句那里更能体现楼主的问题,还有,个人觉得set,get不一定都得public,只要子类能调用就行)子类可以继承父类的所有成员跟方法,私有属性也可以继承,不过根据访问控制规则,私有属性只能在本类内部使用,所以只有通过方法访问继承的私有属性。如下面代码
class Fu
{
private int num = 4;
public void setNum(int num)
{
this.num =num;
}
public int getNum()
{
return this.num;
}
}
class Zi extends Fu
{
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi z = new Zi();
z.setNum(5);
System.out.println(z.getNum());
//System.out.println(z.num);不能这样访问,私有成员只能在本类中调用
}
}作者: 泮和顺 时间: 2012-3-14 16:39
明确不能继承...只有本类中能用 继承体系public 默认 protected都行就私有不行作者: 宋洪祥 时间: 2012-3-14 16:40
要是能继承,当然就可以访问了。既然不可以访问,当然就不能继承。
比如一个类有私有变量,那么我在该类的方法中可以直接使用私有变量,只不过在别的类里面无法来访问而已。假如可以继承私有变量,也就是说该私有变量成了继承类的私有变量了,按照这个说法,在继承的类中的方法里也是可以直接使用私有变量的,所以变成了继承类可以访问被继承类的私有变量了。这个说法矛盾作者: 张润政 时间: 2012-3-14 16:49
子父类出现之后,类中成员的特点
这个问题是关于子父类继承关系出现之后类中成员的特点。
当父类中的成员变量或者函数声明为private私有的时候子类中的对象是不能访问父类中的私有成员的。
如果确实需要用到父类中定义的私有变量,我们一般会在父类中提供一个公有的set和get方法,来操作这个私有的成员。
例如:
class Person{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
System.out.println(name);
return name;
}
public void study(){
System.out.println("good person study");
}
}
class Student extends Person { //学生类继承person类
public void study(){
System.out.println("good student study");
}
}
class ExtendsDemo{
public static void main(String[] args) {
Student stu = new Student();
stu.setName("lisi");
stu.getName();
}
}
另外,如果子父类中出现了非私有的同名成员变量时,子类要访问本类中的变量,用this.;子类要访问父类中的同名变量,用super.;作者: 袁野 时间: 2012-3-14 17:01
需要个 public 的方法 间接的访问父类私有成员作者: 攻城狮 时间: 2012-3-14 17:22
不能继承 只能通过父类提供的public get方法获取···注意是获取不是继承 作者: 丁佼 时间: 2012-3-14 17:35
1、假设父类person中有name私有成员变量,可以通过setName和getName方法进行改写和获取name中的内容
2、子类student继承person类,可以发现子类student同样具有name属性,但是子类无法直接在自己内部对name进行改写和读取,只能通过setName和getName方法来操作name。
3、通过构造函数也可以验证student中存在name属性
person(String name,int age) //父类person的构造函数,为了观看舒适我多添加了一个age属性
{thi.name = name;this.age = age;}
=====================================
student(Sting name,int age) //子类student的构造函数
{super(name,age);}