JAVA继承时构造函数的问题

今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了。

下面是我个人的总结:

先创建一个父类,里面有两个构造函数:

public class Jisuan {

    protected int a=4;
  //构造函数1
    Jisuan()
    {
        System.out.println("父类的无参数构造函数");
    }
   //构造函数2
    Jisuan(int a)
    {
        System.out.println("父类的有参数构造函数");
    }
    }

  再创建一个子类,里面也有两个构造函数:

public class JisuanKid extends Jisuan {
    //构造函数3
    public JisuanKid() {
        System.out.println("子类的无参数构造函数");
    }
    //构造函数4
    public JisuanKid(int a) {
        System.out.println("子类的有参数构造函数");
    }
}

再创建第三个类;

public class TestArray {

    public static void main(String[] args){
    JisuanKid jisuan = new JisuanKid(3);
}}

1、此时执行:

结果:

父类的无参数构造函数
子类的有参数构造函数2、去掉构造函数1

结果:出错

3、去掉构造函数1和2

执行结果:

子类的有参数构造函数4、去掉构造函数4执行结果:
父类的无参数构造函数出现错误

结论如下

1.子类不能继承父类的构造函数
2.若父类中无任何构造函数,则系统默认加上无参数构造函数,创建子类对象时会调用父类的默认无参数构造函数创建父类。然后再调用子类的相应构造函数
3.若父类中有带参数构造函数,则系统不会添加默认无参数构造函数,创建子类对象时会调用父类的无参数构造函数创建父类对象,因为此时父类没有无参数构造函数,故会报错。
4.另外还可以在子类的构造函数中,使用super()或者super(参数名)来使用父类的无参数构造函数和带参数构造函数

时间: 2024-08-25 21:02:41

JAVA继承时构造函数的问题的相关文章

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()

java继承的构造函数

1.在构造函数的继承中,子类不能继承父类的构造函数.但是子类却可以用super()或super(参数)使用父类的构造函数, <1>无参的构造函数: //父类 public class Animal { public Animal(){ System.out.println("Animal父类"); }; } //子类 public class Cat extends Animal{ public Cat(){ //这里隐式使用了super()调用了父类的Animal父类 S

Java继承和构造函数

构造函数不是类的成员,它们不是由子类继承的.它们用于初始化实例变量. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class CSuper {   public CSuper() {     System.out.println("Inside CSuper() constructor.");   } } class CSub extends CSuper {   public CSub() {     System.out.println(&q

【C++】继承时构造函数和析构函数

1. 顺序 先调用基类的构造函数,再调用派生类构造函数.析构顺序相反. 2. 构造函数 派生类 不用初始化列表调用基类构造函数->调用基类的默认构造函数 派生类 使用初始化列表调用基类带参构造函数->调用基类相关的带参构造函数 若派生类有多个构造函数版本,其中任意一个基类的构造函数不匹配,都会出错. 3. 复制构造函数 派生类 未定义复制构造函数 ->调用基类的复制构造函数(如果有)或默认复制构造函数,和派生类的默认复制构造函数 派生类 定义了复制构造函数  未使用初始化列表调用基类复制

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

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

java构造函数使用方法总结 (继承与构造函数)

使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回值 5.构造器总是伴随着new操作一起调用 示例: A.java Java代码 public class A{ public A(){ System.out.println("调用了无参的构造函数"); } public A(String mess){ System.out.println

黑马程序员-Java基础-面向对象—继承、构造函数、重写、final、抽象类、接口

第一讲  继承 1.  继承的作用 1) 提高代码复用性: 2) 让类与类之间产生了关系: 2.  java继承特点 1) java只支持单继承,不支持多继承 因为多继承容易带来安全隐患:当多个父类中定义了相同功能,但功能内容不同时,子类对象不确定要运行哪一个. 2) java支持多层继承:可以形成一个继承体系 利用一个继承体系的方法:阅读体系父类,了解共性功能(该体系的基本功能),具体要调用这些基本功能时,需要创建最子类的对象,为什是最子类: 一是:父类有可能不能创建兑现(如,静态类或接口):

JAVA继承中的构造函数

ps:因为顺口...我喜欢把方法称为函数 1) 一个单独的类,如果没有声明任何构造函数,那么系统会自动生成一个无参的构造函数,此时,new classA() 不会报错. ! 如果显式声明了一个有参构造函数,再使用 new classA(无参) 将会报错,因为在已有情况下系统不会帮助生成无参构造,建议自己添加一个无参构造函数 ---一个类的构造函数只会有三种状况:无参    /   无参+有参    /   有参 2) 如果存在继承关系,假设classB extends classA , 子类的所

Java继承改进

一.java继承改进 首先,多继承的缺点: 1.继承多个父类,父类中方法名相同,产生歧义 2.父类中方法同名,子类未覆盖,也会歧义 所以,java改进,类只能单继承,接口可以多继承 接口中只有抽象方法和静态常量 1.抽象方法只能在实现接口类中实现,调用时调用实现类的方法 2.静态变量在编译期间将确定调用关系了,存在冲突也会在编译的时候提示错误 ,而且引用变量一般直接使用类名或接口名,避免产生歧义. 1.1继承的初始化 继承关系是传递的.如,类C继承类B,类B继承类A,则类C既有从类B继承下来的变