精华内容
下载资源
问答
  • 子类继承父类构造方法
    2019-03-07 20:58:27

    1、显示调用父类构造方法

    2、不重写父类构造方法

    更多相关内容
  • java中的继承(子类调用父类构造方法还不懂).doc
  • 子类继承父类时,若父类有 无参构造方法,则子类构造方法默认隐式调用父类无参构造方法, 当父类没有 无参构造方法,子类的构造方法必须显式调用父类的有参构造方法。   所以代码可以这样改: class A...

    来自csdn论坛的一个帖子,问题如下:

    class A{
        public int i=0;
        A(int m){
            i=1;
        }
    }
    
    class B extends  A{
        B(int m){
            i=2;
        }
    }
    
    public class E{
        public static void main(String args[]){
            B b=new B(100);
            System.out.println(b.i);   
        }
    }

     

    我的回答是:

     

    一个类如果没有定义任何构造方法,系统会默认生成一个无参构造方法,
     当有定义有参构造方法时,则不会自动生成无参构造方法。
    
    子类继承父类时,若父类有 无参构造方法,则子类构造方法默认隐式调用父类无参构造方法,
    当父类没有 无参构造方法,子类的构造方法必须显式调用父类的有参构造方法。

     

    所以代码可以这样改:

    class A{
        public int i=0;
        A(){    //父类添加无参构造
        }
        A(int m){
            i=1;
        }
    }
    
    class B extends  A{
        B(int m){
            i=2;
        }
    }
    
    public class E{
        public static void main(String args[]){
            B b=new B(100);
            System.out.println(b.i);   
        }
    }

     或

    class A{
        public int i=0;
        A(int m){
            i=1;
        }
    }
    
    class B extends  A{
        B(int m){
            super(m);    //子类显式调用父类构造
            i=2;
        }
    }
    
    public class E{
        public static void main(String args[]){
            B b=new B(100);
            System.out.println(b.i);    
        }
    }

     

    展开全文
  • 主要介绍了C++类继承子类调用父类构造函数的实例详解的相关资料,希望通过本文大家能够掌握C++类继承的相关知识,需要的朋友可以参考下
  • 构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统...
  • JAVA子类继承父类时的构造方法

    千次阅读 2021-12-03 16:52:22
    如果父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句中进行调用。 此时再创建子类实例就需要显示的调用父类的...

    在 Java 中,无论是 explicit 还是 implicit 方式,都要求在子类的构造方法中调用其父类的构造方法。如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句中进行调用。

    此时再创建子类实例就需要显示的调用父类的构造方法,并且进行传参,否则创建不出来父类的实例就会编译出错

    当父类有多个构造方法时,子类需要显示的决定使用哪一个构造方法

    究其原因,想必是 Java 语言设计者,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。试想,如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果。

    父类的构造方法子类不可以继承,更不存在覆盖的问题。

    所以子类构造方法默认调用父类的无参构造方法。(所以养成写无参构造的习惯)

    如果子类访问父类的有参构造方法,必须在子类构造方法第一行使用super(参数)

    当构造一个对象的时候,系统先构造父类对象,再构造子类对象。

    如果直接new子类实例,就会调用到父类刚刚这个自动生成的没有参数的构造方法

    当父类里有构造方法时,并且这个构造方法带参数的时候,编译器就不再自动生成无参数版本的构造方法了。l

    例子:父类有了明确参数的构造方法

    public class Animal {
        String name;
        int age;
        public Animal(String name){
        this.name=name;
    }
        public void eat(){
            System.out.println(name+"正在吃");
        }
        public  void getage(){
            System.out.println(name+"年龄是"+age);
        }
    }

    子类继承时也需要在构造方法中为父类的构造方法赋值。不调用父类的构造方法就会报错

    public class Dog extends    Animal{
    String name;
    int age;
        public Dog(String name) {
            super(name);
           // this.name=name;
        }
        public void eat(){
            System.out.println(name+"正在吃ff");
        }
        public void neweat(){
            System.out.println("neweat");
        }
    }
    

    展开全文
  • 继承关系

    结论:

        java中子类继承父类各方法的执行顺序:(这里只写jvm自动调用的方法的顺序,包括静态代码块、代码块、构造方法)

           1、第一次创建子类对象

            父类静态代码块

            子类静态代码块

            父类代码块

            父类构造方法

            子类代码块

            子类构造方法

            2、之后创建子类对象,子类和父类的静态代码块不会执行,其余不变。

    解释:

        1、java的机制是先编译成字节码文件.class  然后在JVM上解释器逐行翻译成机器码文件,那从.class 到JVM加载的时候,就执行static代码块和static变量,所以先执行静态代码块,并且执行顺序是先执行父类的在执行子类的。

        2、创建对象的时候,调用了它的构造方法,所有子类的构造方法第一行的时候都隐含 super(),所以会先调用父类的构造方法,而每次在执行构造方法之前都会执行代码块,父类的代码块,父类的构造方法执行完毕之后,开始执行子类的代码块,构造方法。

        3、补充:

            (1)如果有多个构造方法(比如:有参的、无参的、参数个数不同的),根据创建对象时传的参数找对应的构造方法(比如:无参的找无参的,有参的找有参的)。

            (2)多态的顺序也是这样的。

            (3)加上main方法

                    子类和main方法在同一个类中,如果在new子类对象之前main方法中有语句,那么顺序就是:静态、main()的语句、父类代码块、父类构造方法...... 

                    如果新建一个测试类、在new子类对象之前main方法中有语句,顺序为:main()的语句、静态、父类代码块。

               解释:如果子类和main在同一个类中,加载子类,静态、执行main。如果不在同一个类,先加载main的类,执行到new子类时,才加载子类。

    展开全文
  • 如果在子类中需要父类构造方法就需要显式地调用父类构造方法,或者不重写父类构造方法子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。 class Father(object): def __init__(self, ...
  • 本篇文章介绍了,Java中子类调用父类构造方法的问题分析。需要的朋友参考下
  • JAVA子类调用父类构造方法

    千次阅读 2021-03-06 16:59:23
    父类构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。public class MyException extends Exception{} //MyException类只有一个隐含的默认构造方法尽管在Exception类中定义了如下...
  • python子类继承父类构造函数

    千次阅读 2020-09-19 09:54:34
    1、在子类中需要父类构造方法就需要调用父类构造方法,或者不重写父类构造方法子类不重写 init,实例化子类时,会自动调用父类定义的 init。 class Father(object): def __init__(self, name): self.name...
  • 子类继承父类构造方法

    千次阅读 2020-07-17 10:47:40
    子类继承父类构造方法 情况一:子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。 情况二:子类不需要自动调用父类的方法:子类重写__init__()方法,...
  • 所以在子类继承父类后,必须要在子类构造方法中调用父类的构造方法。 eg: public class Test { public static void main(String[] args) { //通过无参构造创建Zi对象并调用baby() Zi xx = new Zi(); xx.baby();...
  • java子类调用父类构造方法

    千次阅读 2021-04-20 10:00:52
    java子类调用父类构造方法 来源:https://www.cnblogs.com/sunnychuh/archive/2011/09/09/2172131.html(本人用来方便查看笔记,不用于其他任何用途) java继承中对构造函数是不继承的,只是调用(隐式或显式)。 ...
  • 简单说,如果子类继承父类自己写构造方法中没有显示调用父类有参构造方法,则会先隐式调用父类无参构造方法,若是先显示(super(300))调用了父类有参构造方法,则父类的无参构造方法就不会再被调用。 ...
  • 本文实例讲述了Python实现...子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题 如果子类和父类都有构造函数,子类其实是重写了父类的构造函数,如果不显式调用父类构造函数,父类的构造
  • 1.子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过公共的方法去访问。 package com.kxy.extend_; public class Base { public int n1=100; protected int n2=200; int n3=300; ...
  • 子类实例化对象时,会先调用父类构造方法,如果子类构造方法没有显式的调用父类构造方法,默认调用super(); 子类要使用父类有参的构造方法,使用super(参数)形式,且super()必须是子类构造方法中的第一行语句...
  • C++子类继承父类时如何写构造函数

    千次阅读 多人点赞 2020-02-18 15:05:03
    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统...
  • 子类不可以继承父类构造方法,只可以调用父类的构造方法子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。 super()表示子类在初始化时调用...
  • JAVA子类继承父类

    千次阅读 2021-03-01 06:34:01
    1、类的继承知识点 (1)java不支持多重继承,也就是说子类至多只能有一个父类 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法 (3)子类中定义的成员变量和父类中定义的成员变量...
  • 因此此时父类中也要有无参构造器,因为子类构造器中默认存在super(),否则子类或者子类构造器会报错,因为子类中也默认有super() 附子类实例化过程 Person p = new Person(); 1、jvm会读取指定的...
  • 1.如果子类没有定义构造方法,则调用父类... 若子类构造方法中第一行是有参数或无参数的super,则直接转到对应的有参或无参父类构造方法中,而不再是首先执行无参构造方法3.如果子类调用父类带参数的构造方法,可以通...
  • 继承中代码的执行顺序为: 1.父类静态对象,父类静态代码块 2.子类静态对象,子类静态代码块 3.父类非静态对象,父类非静态代码块 4.父类构造函数
  • 子类继承父类是否需要重写方法总结

    千次阅读 多人点赞 2021-05-07 12:52:32
    1.父类是普通类,子类是普通类,不用重写父类方法 父类是普通类,子类是抽象类:不用重写父类方法 2:抽象类继承: 如果父类是抽象类,子类是一个抽象类,父类方法是普通方法:不用重写普通方法 如果父类是...
  • 通过子构造函数来继承构造函数的属性,则在子构造函数内部通过call()来将子构造函数的this指向指向父构造函数,并打印子构造函数 function Father(name,age,sex){ this.name = name; this.age = age; this....
  • 子类实例化时,首先调用父类构造方法然后再调用子类构造方法父类构造方法super()或super(XXX)存在于子类构造方法的代码的最上部。 最不起眼的方式是在子类的默认构造方法中,隐式的调用super().那么子类的...
  • Java子类调用父类构造方法

    万次阅读 多人点赞 2017-09-29 14:49:15
    在Java中,子类构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?   答案如下:   当你new一个子类对象的时候,必须首先要new一个父类...
  • 子类继承父类,子类的所有构造方法都会默认super();访问父类的无参构造方法 无参都没有,子类的所有构造方法报错! 最基本的解决方案: 1)手动给出父类的无参构造方法 2)现在就不手动给出父类的无参构造方法,怎么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 294,213
精华内容 117,685
关键字:

子类继承父类构造方法

友情链接: lesson7.rar