Java子类实例化总是默认调用父类的无参构造操作

子类实例化时,默认调用父类的无参构造方法(不管子类的构造器有没有参数,因为子类继承的是父类的属性和方法,只调用父类的无参构造器就可以继承父类的属性和方法,因此不会调用父类的有参构造器),再调用子类的有参/无参构造器。

示例:

package classTest;
class Father {
 public Father(){
 System.out.println("父类的无参构造方法");

 }
 public Father(int a ) {
 System.err.println("父类的有参构造方法"+a);
 }
}
class Son extends Father{
 public Son() {
 System.out.println("子类中的无参构造方法");
 }
 public Son(int a ) {
  System.out.println("子类中的有参构造方法"+a);
 }
}

public class TestExecute {
 public static void main(String[] args) {
 Son s = new Son();
 System.out.println("---------------");
 Son a = new Son(5);
 }
}

结果:

父类的无参构造方法

子类中的无参构造方法

---------------

父类的无参构造方法

子类中的有参构造方法5

补充知识:JAVA父类和子类的构造函数之间的关系

我就废话不多说了,大家还是直接看代码吧~

class SuperClass {
 private int n;
 SuperClass(){ //父类的无参构造器
  System.out.println("SuperClass()");
 }
 SuperClass(int n) { //父类的带参构造器
  System.out.println("SuperClass(int n)");
  this.n = n;
 }
}
class SubClass extends SuperClass{
 private int n;

 SubClass(){ //子类的无参构造器
  super(300);//调用父类的带参构造器,super(300)相当于SuperClass(300)
  System.out.println("SubClass");
 } 

 public SubClass(int n){ //子类的带参构造器
  System.out.println("SubClass(int n):"+n);
  this.n = n;
 }
}
public class TestSuperSub{
 public static void main (String args[]){
  SubClass sc = new SubClass();
  SubClass sc2 = new SubClass(200);
 }
}

这个实例的输出结果是:

SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200

从这个实例得到的结果是(个人见解):子类在构造时,会根据主函数中是否传入参数来选择使用无参构造器 or带参构造器,在这个实例中:

当子类调用的是无参构造器时,若父类的构造器是带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。

当子类调用的是带参构造器时,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

以上这篇Java子类实例化总是默认调用父类的无参构造操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java中父类怎么调用子类的方法

    父类能调用子类的方法吗? 答:能. 怎么做? 把子类传递到父类的有参构造中,然后调用. 使用反射的方式调用,你使用了反射还有谁不能调用的?! 父类调用子类的静态方法. 案例展示: package com.ywq; public class Test2{ public static void main(String[] args) { Son son = new Son(); Father father=new Father(son); father.fun1(); father.fun4();

  • Java编程关于子类重写父类方法问题的理解

    子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改,与父类返回值类型相同.那么,该如何理解呢?为什么要是父类返回值类型的子类? 提出问题:子类必须重写父类所有方法吗? Java,子类不是必须重写父类所有方法的,分为以下两种情况: 父类方法为抽象方法时,子类必须重写(实现)所有父类的抽象方法: 父类方法为普通方法时,子类可以重写父类方法,也可以不重写

  • 深入解析Java接口(interface)的使用

    Java接口(interface)的概念及使用 在抽象类中,可以包含一个或多个抽象方法:但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加"抽象". 接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做. 现实中也有很多接口的实例,比如说串口电脑硬盘,Serial ATA委员会指定了Serial ATA 2.0规范,这种规范就是接口.Serial ATA委员会不负责生产硬盘,只是指定

  • Java子类实例化总是默认调用父类的无参构造操作

    子类实例化时,默认调用父类的无参构造方法(不管子类的构造器有没有参数,因为子类继承的是父类的属性和方法,只调用父类的无参构造器就可以继承父类的属性和方法,因此不会调用父类的有参构造器),再调用子类的有参/无参构造器. 示例: package classTest; class Father { public Father(){ System.out.println("父类的无参构造方法"); } public Father(int a ) { System.err.println(&qu

  • java创建子类对象设置并调用父类的变量操作

    通过子类调用父类的变量,有两种方法: 1.把父类的变量设置成public: package triangle.opengl.wlz.stu.childusefathervariable; import android.util.Log; public class BasePublicVariable { private String TAG = getClass().getName(); public int data; public void ptData(){ Log.d(TAG, "ptD

  • Java中子类调用父类构造方法的问题分析

    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下:    当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以: 第一个规则:子类的构造过程中,必须调用其父类的构造方

  • C++/JAVA/C#子类调用父类函数情况总结

    时间久了就容易记不清了,特留存备用查看 c++ 1.构造函数调用   常用初始化列表  或者显示调用 1.1同一个类中构造函数调用构造函数   尽量不要这样做,因为结果不确定!避免麻烦 可以把共用的代码封装成一个私有的成员函数,然后在构造函数内统一调用. 1.2子类构造函数调用基类构造函数 -----基类有默认构造函数时,可以在子类不写,则隐式调用 -----基类无/有默认构造函数时,在子类构造函数初始化列表处调用,则显示调用     基类类名(参数) class Base { public:

  • C#中子类调用父类的实现方法

    本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用.具体方法如下: 一.通过子类无参构造函数创建子类实例 创建父类Person和子类Student. public class Person { public Person() { Console.WriteLine("我是人"); } } public class Student : Person { public Student() { Console.WriteLine("我是学生"); } }

  • Java super关键字调用父类过程解析

    这篇文章主要介绍了Java super关键字调用父类过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 话不多说,直接上代码: package com.my.pac14; /** * @auther Summerday */ public class SuperTest { public static void main(String[] args) { SubClass sb = new SubClass(20); //创建子类的对象,调

  • Python实现子类调用父类的初始化实例

    前言 python中进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错. 例如以下的代码: class A(object): def __init__(self): self.a = 5 def function_a(self): print('I am from A, my value is %d' % self.a) class B(A): def __init__(self):

  • php实现parent调用父类的构造方法与被覆写的方法

    本文实例讲述了php实现parent调用父类的构造方法与被覆写的方法.分享给大家供大家参考.具体分析如下: 覆写:被重新设计. 在子类中定义构造方法时,需要传递参数给父类的构造方法,否则我们得到的可能是一个构造不完整的对象. 要调用父类的方法,首先要找到一个引用类本身的途径:句柄(handle),PHP为此提供了parent关键字.   parent 调用父类的构造方法 要引用一个类而不是对象的方法,可以使用 ::(两个冒号),而不是 ->. 所以, parent::__construct()

  • java子类调用父类的方法中包含子类重写的实例方法

    # 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了 # 先看代码: public class Common { public static void main(String[] args) { Sub sub = new Sub(); sub.testSub(); } } class Parent { protected boolean test() { throw new RuntimeException(); } protected void testParent() { if (t

  • Java子类对象的实例化过程分析

    本文实例讲述了Java子类对象的实例化过程.分享给大家供大家参考,具体如下: 一 点睛 子类对象在实例化时,子类对象会默认先调用父类中的无参构造函数,然后再调用子类构造构造方法. 二 实战 1 代码 class Person { String name ; int age ; public Person() // 父类的构造方法 { System.out.println("***** 父类构造:1. publicPerson()") ; } } class Student extend

随机推荐