黑马程序员技术交流社区

标题: 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