关于继承时构造方法的问题

1、在一个类中,如果不定义构造函数,都会有一个默认的无参构造函数

2、如果在一个类中定义了一个有参数的构造函数,那原来那个无参的构造函数就没了,你可以手动把无参的也定义出来

3、当子类继承父类时,子类的构造函数的第一行都会通过super();来默认调用父类的无参构造函数

4、当父类中定义了一个有参的构造函数,而没有把无参的构造函数明确出来,这样父类中无参构造函数就没了,当子类在

继承父类的时候,子类的构造函数第一行通过super();找不到父类的无参构造函数,就会报错

5、在4的基础上,要想不报错,就需要在子类构造函数的第一行通过super(int x)来显式调用父类的有参构造函数,或者通过this来调用

子类中的其他构造函数,其他构造函数调用父类的构造函数,这样通过其他构造函数就间接的调用了父类的构造函数

6、不管怎么说,子类构造函数必须要调用父类的构造函数(有参或无参),可以自己调,也可以通过兄弟构造函数间接调

时间: 2024-11-03 21:34:51

关于继承时构造方法的问题的相关文章

JAVA中,子类继承时构造方法注意事项

类的继承不容易理解的一种情况:父类只存在有参构造,子类的构造方法必需要做相应的处理,比如说也创建有参构造,为什么? 1.任何类,如果无显示的声明构造方法,都会默认隐式存在一个无参构造. 2.子类构造方法中如果不指定调用父类的哪个构造方法,都会隐式调用父类的无参构造. 3.如果父类中显示的定义了有参构造,就不会隐式的创建无参构造了. 4.此时的子类中隐式的构造中仍然会去掉用父类的无参构造,但是父类中并不存在无参构造了,所以会出错. 5.知道了原因就知道怎样去解决了. a.父类中显示定义无参构造.

关于继承时子类重写父类方法和覆盖父类变量的若干问题

假设,子类重载父类的方法,并将子类的成员覆盖. 创建子类对象实例,将其上转型成父类. 例子1 public class Parent { public void init() { System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } public class Son extends Parent

方法和变量在继承时的覆盖和隐藏问题

作者:华清远见讲师 最近有个同学问了我一个小问题,觉得很有意思,之前一直没有想到过.他说"java中存在方法覆盖,是否存在变量的覆盖呢?".我们知道,在java中,子类可以继承父类,如果子类声明的方法与父类有重名,这时就发生了方法覆盖.其实,这实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试中还是比较常见的,所以这里来讨论下 首先我们来看几个概念 隐藏 :子类隐藏了父类的变量和方法,那么,子类不能访问父类被隐藏的变量或者方法,但是,将

从Qt谈到C++(二):继承时的含参基类与初始化列表

提出疑问 当我们新建一个Qt的图形界面的工程时,我们可以看看它自动生成的框架代码,比如我们的主窗口名称为MainWindow,我们来看看mainwindow.cpp文件: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { } 不同于一般的继承,这里的父类的括号里带有参数,我们通常都使用过不带参数,甚至不带括号的基类名称.这里的基类为什么带着参数呢? C++继承与构造函数

JAVA中继承时方法的重载(overload)与重写/覆写(override)

JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系.同时,重载可以发生在同一个类中也可以发生在继承关系中. class A { } class B extends A { public void fun(String data1) { System.out.println(data1); } pub

JAVA继承时this和super关键字

JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父类中查找. class A { public void fun() { System.out.println("父类的fun()"); } } class B extends A { public void test() { this.fun(); } public void fun()

方法和变量在继承时的覆盖和隐藏

package com.jdk7.chapter2.converhide; public class Parent { public static String kind = "com.jdk7.chapter2.Parent"; //类变量 public static int age = 100; //类变量 public String name = "Parent"; //实例变量 public static String getKind() { //静态方法

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺

class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法.子类也是这样,然后继承之后,关于程序打印输出的结果.涉及到Java类的各种成员的初始化顺序.经测试,得到如下结论: 1.父类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行.2.子类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行.3.父类的[普通成员变量被普通成员方法赋值]和[普通代码块],按在代码中出现的顺序依次执行.4.执行父类的构造方法

有继承时的构造方法(转)

1.子类的构造方法中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 3.使用this(arguement_list)调用本类的其他构造方法. 4.如果使用super()调用基类的构造方法必须写在子类构造方法的第一行. 5.如果子类的构造方法中没有显示的调用基类的构造方法,那么系统自动调用基类中没有参数的构造方法. 6.如果子类的构造方法中既没有显示的调用基类的构造方法,而且基类中也没有无参数的构造方法,则编译出错. cl