黑马程序员技术交流社区

标题: 继承 [打印本页]

作者: 古月哥欠    时间: 2014-12-19 23:19
标题: 继承
不是很懂子父类中构造方法的执行,以下列程序为例,求解释
class A
        {
                public int num = 5;

                public A()
                {
                        System.out.println("F");
                }
        }

        class B extends A
        {
                public int num = 10;

                public B()
                {
                       
                        System.out.println("S");
                }

                public void show()
                {
                        int num = 50;
                        System.out.println(num);       
                        System.out.println(this.num);       
                        System.out.println(super.num);       
                }
        }

        class Test
        {
                public static void main(String[] args)
                {
                        A a = new A();
                        a.show();
                }
        }
作者: 不给吃鸭梨    时间: 2014-12-19 23:29
你那个Test创建的父类对象?假如你就是创建的子类对象
1.子类继承父类,要具有父类的属性,必须检查父类初始化详情,所以子构造里都有一句隐式的super
2.例子中创建子类对象会先访问父类构造,会输出F。
3.然后访问子类构造输出S。
4.初始化完毕,调用show方法。
5.就近原则num输出方法体内的50.
6.this本类对象引用输出子类成员变量10
7.super父类引用输出父类num5
作者: Honelyboy    时间: 2014-12-19 23:48
a.show();处编译出错,找不到符号。
作者: 侯鹏成    时间: 2014-12-19 23:55
由A a=new A()先继承父类的构造方法public B(),输出S,同时父类被初始化,然后执行子类构造方法public B()
作者: 侯鹏成    时间: 2014-12-19 23:57
接着执行show()方法,依次输出50 10 5,this和super的用法相信楼主应该知道
作者: 侯鹏成    时间: 2014-12-19 23:59
侯鹏成 发表于 2014-12-19 23:55
由A a=new A()先继承父类的构造方法public B(),输出S,同时父类被初始化,然后执行子类构造方法public B() ...

父类先输出F子类输出S,写的急了:L
作者: zw937820438    时间: 2014-12-20 00:05
由于继承体现了一种关系:is a的关系。xxx is yyy的一种。

作者: 青衫禅客    时间: 2014-12-20 00:50
代码错了,A类中都没有show方法,怎么调用啊?!
作者: 古月哥欠    时间: 2014-12-20 21:45
不给吃鸭梨 发表于 2014-12-19 23:29
你那个Test创建的父类对象?假如你就是创建的子类对象
1.子类继承父类,要具有父类的属性,必须检查父类初 ...

class Test
        {
                public static void main(String[] args)
                {
                       B  b = new B();
                        b.show();
                }
        }
不好意思,写错了,应该是上面这样的,谢谢解惑!
作者: 冷风    时间: 2014-12-20 21:53
    A a = new A();  我没看错把




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2