精华内容
下载资源
问答
  • 子类B默认调用父类无参构造方法,但是如果父类写了有参构造方法却没写无参构造方法,就算子类写了无参构造方法也会报错。 但是若子类没有无参构造并且之后都没有用到无参构造,不会报错: 子类若要调用父类有参...

    子类B默认调用父类无参构造方法,但是如果父类写了有参构造方法却没写无参构造方法,就算子类写了无参构造方法也会报错。
    在这里插入图片描述
    在这里插入图片描述
    但是若子类没有无参构造并且之后都没有用到无参构造,不会报错:
    在这里插入图片描述
    子类若要调用父类有参构造方法,使用super

    import java.util.*;
    class A{
    	public A() {
    		System.out.println("defalut\n");
    	}
    	public A(int x) {
    		System.out.println("have \n");
    	}
    }
    class B extends A{
    	public B(int x) {
    		super(x);
    	}
    }
    public class t {
    	boolean x;
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int x =1;
    		B c = new B(x);
    		
    	}		
    }
    
    展开全文
  • Java子类调用父类构造方法

    万次阅读 多人点赞 2017-09-29 14:49:15
    Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?   答案如下:   当你new一个子类对象的时候,必须首先要new一个父类...

    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?    

       答案如下:    

        当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以:    

         第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是这样就会调用父类没有参数的构造方法,如果父类中没有没有参数的构造方法就会出错。    

         第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数。

      

    复制代码
     1 //当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法。
     2 class Animal{
     3   private String name;
     4   
     5   //如果你定义一个新的构造方法
     6   public Animal(String name) {
     7     this.name = name;
     8   }
     9 }
    10 
    11 public Dog extends Animal{
    12   
    13   //这时你就要显示的调用父类的构造方法,因为子类默认调用的是父类的
    14   //无参构造方法Animal()
    15   public Dog(){
    16     super("小狗");  //显示调用父类的有参构造方法
    17 
    18     ....  //子类的构造方法处理
    19   }
    20 }
    21 
    22 //当然,如果你在父类里面把无参的构造方法,显示的写出来了,比如:
    23 class Animal{
    24   private String name;
    25 
    26   //无参的构造方法
    27   public Animal() {
    28     .....  //处理
    29   }
    30   
    31   /*
    32   如果你定义一个新的构造方法,那么在子类的构造方法中,就可以不用显示的调用父类的构造方法,因为子类有个无参的构造方法,
    33   子类在构造方法中会自动调用父类已经定义的无参构造方法。
    34   */
    35   public Animal(String name) {
    36     this.name = name;
    37   }
    38 }
    复制代码

    总结:不过一般的,在父类中使用了构造方法的重载,在子类中就可以根据需要,调用相应的父类构造方法。

    展开全文
  • 子类调用父类构造方法 父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。 public class MyException extends Exception{} // MyException类只有一个隐含的默认构造...

    子类调用父类的构造方法

     
    父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。
    public class MyException extends Exception{} // MyException类只有一个隐含的默认构造方法
    尽管在Exception类中定义了如下形式的构造方法:
    public Exception(String msg)
    但MyException类不会继承以上Exception类的构造方法,因此以下代码是不合法的。
    //编译出错,MyException类不存在这样的构造方法
    Exception e=new MyException("Something is error");
    在子类的构造方法中,可以通过super语句调用父类的构造方法。例如:
    public class MyException extends Exception{
    public MyException(){
    //调用Exception父类的Exception(String msg)构造方法
    super("Something is error");
    }
    public MyException(String msg){
    //调用Exception父类的Exception(String msg)构造方法
    super(msg);
    }
    }
    用super语句来调用父类的构造方法时,必须遵守以下语法规则。
    l 在子类的构造方法中,不能直接通过父类方法名调用父类的构造方法,而是要使用super语句,以下代码是非法的:
    public MyException(String msg){
    Exception(msg); //编译错误
    }
    l 假如在子类的构造方法中有super语句,它必须作为构造方法的第一条语句,以下代码是非法的:
    public MyException(){
    String msg= "Something wrong";
    super(msg); //编译错误,super语句必须作为构造方法的第一条语句
    }
    在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。例如以下父类Base和子类Sub分别有一个实例变量a和b,当构造Sub实例时,这两个实例变量都会被初始化。
    public class Base{
    private int a;
    public Base(int a){ this.a=a;}
    public int getA(){return a;}
    }
    public class Sub extends Base{
    private int b;
    public Sub(int a,int b){super(a); this.b=b;}
    public int getB(){return b;}
    public static void main(String args[]){
    Sub sub=new Sub(1,2);
    System.out.println("a="+sub.getA()+" b="+sub.getB()); //打印a=1 b=2
    }
    }
    在例程11-3(Son.java)中,Son类继承Father类,Father类继承Grandpa类。这3个类都显式定义了默认的构造方法,此外还定义了一个带参数的构造方法。
    例程11-3 Son.java
    class Grandpa{
    protected Grandpa(){
    System.out.println("default Grandpa");
    }
    public Grandpa(String name){
    System.out.println(name);
    }
    }
    class Father extends Grandpa{
    protected Father(){
    System.out.println("default Father");
    }
    public Father(String grandpaName,String fatherName){
    super(grandpaName);
    System.out.println(fatherName);
    }
    }
    public class Son extends Father{
    public Son(){
    System.out.println("default Son");
    }
    public Son(String grandpaName,String fatherName,String sonName){
    super(grandpaName,fatherName);
    System.out.println(sonName);
    }
    public static void main(String args[]){
    Son s1= new Son("My Grandpa", "My Father", "My Son"); //①
    Son s2=new Son(); //②
    }
    }
    执行以上main()方法的第①条语句,打印结果如下:
    My Grandpa
    My Father
    My Son
    此时构造方法的执行顺序如图11-1所示。
    如果子类的构造方法没有用super语句显式调用父类的构造方法,那么通过这个构造方法创建子类对象时,Java虚拟机会自动先调用父类的默认构造方法。执行以上Son类的main()方法的第②条语句,打印结果如下:
    default Grandpa
    default Father
    default Son

    转载于:https://www.cnblogs.com/MR-Guo/p/3306251.html

    展开全文
  • java子类调用父类构造器函数

    万次阅读 多人点赞 2019-06-25 15:52:54
    java子类调用父类构造器函数详解

    正文

    class FatherClass{
        public FatherClass(){
            System.out.println("父类 无参 构造函数");
        }
        public FatherClass(int i){
            System.out.println("父类 一个参数构造函数super = "+i);
        }
        public FatherClass(int i,String j){
            System.out.println("父类 一个参数构造函数superi = "+i+",superj = "+j);
        }
    
    }
    
    class SonClass extends FatherClass{
        public SonClass(){
    //      super(22);//line 1
            System.out.println("子类 无参 构造函数");
        }
        public SonClass(int a){
            super(33,"Hello");//line 2
            System.out.println("子类一个参数构造函数sub = "+a);
        }
        public void fun(int a){//子类中定义一个实例函数
            //super(33,"Hello");//构造函数调用必须声明在构造函数中,这行代码不注释的话会报错
            System.out.println("子类一个参数构造函数sub = "+a);
        }
    }
    public class ConstructorExtend {//测试子类继承父类的构造函数
        public static void main(String args[]){
    //  FatherClass fa = new FatherClass();
    //  FatherClass fa1 = new FatherClass(100);
    //  SonClass son = new SonClass();
        SonClass son1 = new SonClass(200);
        son1.fun(2);
        }
    }
    

    子类 调用 父类的构造函数:(构造函数不会被继承,只是被子类调用而已)

    1、子类所有的 构造函数 默认调用父类的无参构造函数(其实是默认省略掉了一行代码:super(););省略掉的这行super()代码可以自行添加到构造函数的第一行(必须是第一行,否则报错)

    2、如果父类没有定义构造函数,系统会默认定义一个无参无返回值的构造函数,子类继承时无需(无需的意思是:可以写可以不写)在子类构造函数中显式调用super( );如果父类定义了有参构造函数,此时子类的构造函数中第一行必须显式调用父类定义的某个有参数构造函数。即,显式调用对应的参数个数、对应参数类型与此super( [arg0][,arg1]…. )的父类构造函数。

    3、如果子类的某个构造函数 想 调用父类的其他的带参数的构造函数,在构造函数的第一行人为添加 super(val1,val2[,val3…]),super()括号中的变量数量由想调用的父类的构造函数中的变量数量决定。如代码中的line 2,调用的是父类构造函数中两个参数的构造函数,那么Super(20,”Hello”)就两个变量。

    4、自行添加super(val1,val2,…),就可以指定调用父类的那个参数类型和数量一致的构造函数。之后在此子类构造函数中,系统不会再默认调用父类无参构造函数;

    5、如果子类的每个构造函数都自行添加super([val1,]….),除非人为调用父类无参构造函数,否则的话父类的无参构造函数可以不写。有super指定调用的父类构造函数存在即可

    6、super指代父类对象,可以在子类中使用 super.父类方法名(); 调用父类中的方法(无论是类方法还是实例方法都可以),此外调用实例方法还可以在方法内部实例化再调用


    作者简洁

    作者:小碗汤,一位热爱、认真写作的小伙,目前维护原创公众号:『我的小碗汤』,专注于写golang、docker、kubernetes等知识等提升硬实力的文章,期待你的关注。 转载说明:务必注明来源(注明:来源于公众号:我的小碗汤, 作者:小碗汤)

    展开全文
  • Java中子父类构造方法 Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法...
  • 其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super() 隐示super() 先说一下什么情况下会有隐示的super()。 1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条...
  • 继承有个特点,就是子类无法访问父类的private字段或者private方法。例如,Student类就无法访问Person类的name和age字段: class Person { private String name; private int age; } class Student extends ...
  • 简单说,如果子类继承父类自己写构造方法中没有显示调用父类有参构造方法,则会先隐式调用父类无参构造方法,若是先显示(super(300))调用了父类有参构造方法,则父类的无参构造方法就不会再被调用。 ...
  • 关于子类构造方法中调用父类构造方法之 super()

    万次阅读 多人点赞 2018-03-27 21:09:47
    笔者之前一直很疑惑:为什么别人的源代码中的类...这个是Java的规定:子类继承父类,子类的构造方法必须调用super()即父类构造方法,而且必须放在构造方法的第一行。那么问题又来,为什么我写的类有时候都不用去...
  • Java子类调用父类构造方法

    千次阅读 2020-05-20 20:44:47
    一、自动调用父类无参构造方法 //这是父类 public class SuperClass { //父类无参构造方法 public SuperClass(){ System.out.println("父类无参构造方法"); } //父类带参构造方法 public SuperClass(String ...
  • Java子类实例化调用父类构造方法

    千次阅读 2019-03-13 14:09:25
    子类继承父类后,获取到父类的属性和方法,这些属性和方法在使用前必须先初始化,所以须先调用父类构造器进行初始化 同时父类也会加载进来,静态代码块会执行 ...
  • java调用父类构造

    千次阅读 2014-11-15 21:35:59
    子类不会获得父类的构造器,但子类构造器里可以调用父类构造器的初始化代码
  • 本篇文章介绍了,Java中子类调用父类构造方法的问题分析。需要的朋友参考下
  • 一、继承中的构造方法的执行顺序 创建对象时,会先自动调用父类的构造函数,再自动调用子类的构造函数。 解释:super()表示父类的构造函数并会调用于参数相对应的父类中的构造函数。子类中,它在调用父类中空参数...
  • JAVA—继承构造方法的访问特点(super调用父类构造方法怎么调?super和this的区别) 1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行子类构造;如下例子 父类: public ...
  • java子类调用父类构造函数-----super()详解 java子类调用父类构造函数-----super()详解 1.子类不能继承父类的构造函数,但是可以调用父类构造函数 2.如果父类没有定义构造函数,系统会默认定义一个无参无...
  • JAVA是一门面向对象的编程语言,与其它的面向对象的编程语言类似,继承,多态等的设计模式是一致的,在我刚开始学习Java的时候,在子类如何调用父类构造方法上面花费了很长的时间去理解,我想了很长一段时间,不知道java...
  • Java构造函数之调用父类构造函数

    万次阅读 2016-09-21 09:54:39
    子类可以通过super关键字来显式地调用父类构造函数。 当父类没有提供无参数的构造函数时,子类的构造函数中必须显式的调用父类构造函数; 如果父类提供了无参数的构造函数,此时子类的构造函数就可以不显式的...
  • 当一个类继承于另一个类,子类中没有父类方法时,用子类的对象调用方法时,会首先在子类中查找,如果子类中没有该方法,再到父类中查找。 当一个方法只在父类中定义时,调用方法时会使用父类中的属性。 如果该...
  • package four; //定义一个类 class Animals2{ public Animals2(String name){ System.out.println("我是一只"+name);...通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。
  • public class A { public String name;... System.out.println("父类的无参数构造方法"); } public A(String str){ this.name=str; System.out.println("父类的有参数构造方法"); } } ...
  • 调用父类构造方法

    千次阅读 2021-01-19 09:44:56
    1、使用super调用父类构造方法,必须是子类构造方法的第一个语句。 使用this调用重载的构造方法,也必须是构造方法的第一个语句。 可以看到,程序中已经标红,这是不行的。解决这个问题,可以自己定义一个init...
  • 我们可以在子类的构造器中,通过super关键字调用父类构造器。 //父类 class Person { private String name; public Person() { } } //子类 class Man extends Person{ private int age; public Man() {...
  • Java父类构造方法优先于子类构造方法先执行,父类优先于子类存在(代码): package cn.tedu.extendsx; public class ExtendsDemo4 { public static void main(String[] args) { //创建猪类对象 Pig p=new Pig()...
  • 阅读Test.java代码,运行结果为? class Person { String name = "No name"; public Person(String nm) { name = nm; } } class Employee extends Person { String empID = "...
  • 一般在子类中显式的调用父类构造方法,若没有显式调用的调用,则子类会默认调用父类的无参构造方法。(**若父类没有无参构造方法,则会编译报错**) 为什么要这样规定呢? 笔者认为:子类会从父类那里继承所有的...
  • super().__init__(父类构造函数需要的参数,不包括self) class People: def __init__(self, name, age): self.name = name self.age = age class Student(People): def __init__(self, name,...
  • JAVA中super()作用:调用父类构造方法和构造方法链 写给自己看的笔记。 写在纸上我会弄丢。 有什么错误欢迎大家提出。 代码: public class Test extends B { public static void main(String[] arg) { new ...
  • 子类调用父类构造器 重写父类方法子类扩展了父类,子类是一个特殊的父类。大部分时候,子类总是以父类为基础,额外增加新的成员变量和方法。但有一种情况例外:子类需要重写父类的方法。例如鸟类都包含了飞翔方法,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 260,280
精华内容 104,112
关键字:

java调用父类构造方法

java 订阅