黑马程序员技术交流社区
标题:
java求助,关于继承
[打印本页]
作者:
猜猜我是谁
时间:
2016-3-9 19:44
标题:
java求助,关于继承
继承:
子类只能继承父类所有非私有的成员(成员方法和成员变量)
所以说父类定义的私有的成员变量不能被子类继承,例如说: private String name;
但是父类中定义的getName()方法和setName()方法不是私有的,可以被继承,
可是子类中并没有该成员变量 name,调用 setName()方法的时候赋值是赋值给谁,父类
中的name不是被设定成私有的不能继承吗?
我尝试了一下,虽然B中并没有name,但是依然赋值成功了.但是不明白原因.
class Demo_Extends {
public static void main(String[] args) {
DemoA a = new DemoA();
DemoB b = new DemoB();
a.setName("张三");
a.setAge(23);
System.out.println(a.getName() + "..." + a.getAge());
System.out.println("______________");
b.setName("李四");
b.setAge(24);
System.out.println(b.getName() + "..." + b.getAge());
}
}
class DemoA {
private String name;
private int age ;
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
class DemoB extends DemoA {
}
作者:
wlsperfect
时间:
2016-3-9 21:49
拿b.setName("李四")来给你做个说明:b.setName("李四")这句话是来调用子类setName()方法,但子类中没有setName()方法,可是子类继承了父类,父类中有setName,所以这时候父类的setName方法中就相当于String name ="李四",然后执行父类setName方法中的语句this.name = name,即this.name = "李四",所以父类private String name =李四.
最后通过调用b.getName()方法,就可以在控制台输出李四了.
最后再提醒你一点,调用子类setName方法和并不需要看子类有没有成员变量name,调用setName只要传给子类setName一个String类型的名字就可以,实际这String类型的名字最后是被父类的setName方法接收的,父类接收到名字后就可以赋值给private String name了.
作者:
lixianglei
时间:
2016-3-10 19:39
楼上讲的很好
作者:
豆豆斌
时间:
2016-3-10 20:34
首先,调用setName()方法,赋值的是父类中的私有变量,
在调用setName()方法时,方法入栈内存,方法里面有this,代表的是当前类的对象, this.name= name,表示通过this中存储的对象地址值找到了堆内存中的对象,并将值赋值给name
作者:
zx7660
时间:
2016-3-10 21:00
子类对象调用set()方法方法的时候,父类会给私有成员变量赋值然后再通过get()方法返回,父类私有成员变量没有被继承只是起到参数传递的作用
作者:
lovelife
时间:
2016-3-10 22:38
楼主和层主讲的都很好 受教了
作者:
友人A
时间:
2016-3-10 23:01
三楼很有道理。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2