黑马程序员技术交流社区

标题: 继承 [打印本页]

作者: 冯国强    时间: 2013-11-3 17:49
标题: 继承
在继承中,例如有三个类,A,B,C ;C继承B,B继承A,那么在B类中能否指定调用类A中的某个构造函数?在C类中能否指定调用A类中的某个构造函数?
作者: 寻丶丶觅    时间: 2013-11-3 18:03
在B类中调用A类的构造函数,super(A类对应参数),C类不可以调用A类构造方法,不过可以通过B类传递
比如,简写了 只写了构造函数
A(String name)
{this.name = name;}
B(Striing name)
{super(name);}
C(String name)
{super(name);}//这里就是先把name传递到B类的对应构造函数,B又传递到A类的构造函数。
作者: joechen    时间: 2013-11-3 18:21
我的理解是构造函数是给类初始化用的,建立该类的一个对象就会对该类初始化一次。每个类中都有一个空参数构造函数,我们也可以自定义构造函数。
子类中的构造函数中第一行如果不声明使用父类中的何种构造函数,那么都会有super();默认调用父类中的空参数构造函数

作者: ~﹏~    时间: 2013-11-3 18:24
调用父类的函数(包括构造函数)需要使用super
在B类中可以使用super.A类的方法或super(构造参数)
但是在C类中无妨直接调用A类的构造,但是会间接的调用A类的构造!
作者: 回天之力    时间: 2013-11-3 18:37
直接子类可以通过super关键字直接调用父类中的构造函数,但是孙类级别的,还没有方法直接进行访问,只能通过楼上说的,通过B来间接访问。但是A中的其他方法还是可以直接访问的。
  1. class A
  2. {
  3.    A()
  4.    {
  5.            System.out.println("A.name=null");
  6.         }
  7.    A(String name)
  8.    {
  9.            System.out.println("A+name="+name);
  10.    }
  11.    public void test()
  12.    {
  13.            System.out.println("this is class A--function test");          
  14.    }
  15. }
  16. class B extends A
  17. {
  18.    B()
  19.    {
  20.            super("tom");
  21.            System.out.println("B.name=null");
  22.         }
  23.    B(String name)
  24.    {   super();
  25.            System.out.println("B+name="+name);          
  26.    }
  27. }
  28. class C extends B
  29. {
  30.    C()
  31.    {   
  32.            super();
  33.            System.out.println("C.name=null");
  34.     }
  35.    C(String name)
  36.    {
  37.            System.out.println("C+name="+name);          
  38.    }
  39. }
  40. public class HelloWorld {
  41.         public static void main(String[] args) {

  42.                 new C().test();
  43.         }
  44. }
复制代码

作者: 剑魂    时间: 2013-11-3 18:41
子类不继承父类的构造方法,在子类的构造方法中可以使用super(参数列表)调用父类的构造方法,如果没有显示,在父类有默认构造函数的情况下,产生子类实例时,系统默认调用父类的无参构造方法,C类不能直接调用A的构造方法,但可以通过B间接调用




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