子父类中构造方法的调用

  在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。

  格式:

  调用本类中的构造方法

  this(实参列表);

  调用父类中的空参数构造方法

  super();

  调用父类中的有参数构造方法

  super(实参列表);

  为什么子类对象创建都要访问父类中的构造方法?因为子类继承了父类的内容,所以创建对象时,必须要先看父类是如何对其内容进行初始化的,看如下程序:

  public class Test {

     public static void main(String[] args) {

      new Zi();

    }

  }

  class Fu{

    int num ;

  Fu(){

    System.out.println("Fu构造方法"+num);

      num = 4;

    }

  }

  class Zi extends Fu{

  Zi(){

    //super(); 调用父类空参数构造方法

     System.out.println("Zi构造方法"+num);

  }

  }

  执行结果:

       Fu构造方法0

       Zi构造方法4

  通过结果发现,子类构造方法执行时中,调用了父类构造方法,这说明,子类构造方法中有一句super()。

  那么,子类中的构造方法为什么会有一句隐式的super()呢?

  原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。

  当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。

子类对象创建过程的细节

  如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗?

  这时是没有的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。

  父类构造方法中是否有隐式的super呢?

  也是有的。记住:只要是构造方法默认第一行都是super();

  父类的父类是谁呢?super调用的到底是谁的构造方法呢?

  Java体系在设计,定义了一个所有对象的父类Object

  注意:

  类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。

  如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过this或者super的形式明确要调用的构造方法。

super应用

  练习:描述学生和工人这两个类,将他们的共性name和age抽取出来存放在父类中,并提供相应的get和set方法,同时需要在创建学生和工人对象就必须明确姓名和年龄

  //定义Person类,将Student和Worker共性抽取出来

  class Person {

    private String name;

     private int age;

      public Person(String name, int age) {

    super();

     this.name = name;

     this.age = age;

   }

  public String getName() {

     return name;

  }

  public void setName(String name) {

     this.name = name;

   }

   public int getAge() {

     return age;

   }

  public void setAge(int age) {

this.age = age;

  }

  }

class Student extends Person {

// Student类的构造方法

Student(String name, int age) {

// 使用super关键字调用父类构造方法,进行相应的初始化动作

super(name, age);

}

public void study() {// Studnet中特有的方法

System.out.println(this.getName() + "同学在学习");

}

}

class Worker extends Person {

Worker(String name, int age) {

// 使用super关键字调用父类构造方法,进行相应的初始化动作

super(name, age);

}

public void work() {// Worker 中特有的方法

System.out.println(this.getName() + "工人在工作");

}

}

public class Test {

public static void main(String[] args) {

Student stu = new Student("小明",23);

stu.study();

Worker w = new Worker("小李",45);

w.work();

}

}

转载于:https://www.cnblogs.com/miaoxingren/p/9375401.html

java -super关键字相关推荐

  1. java super关键字简述

    java super关键字简述 super关键字访问父类属性,访问权限必须是允许的 super关键字访问父类属性,访问权限必须是允许的 当创建子类对象时,默认调用父类的无参构造方法,除非显式调用父类的 ...

  2. Java super关键字

    super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...

  3. java super关键字_Java入门(二)下

    点击蓝字关注我们 01 面向对象三大特性(2)---继承 一. 概念 继承是java三大特性之一(封装装,继承,多态).继承是从已有的类中派生出新的类.新的类继承原有类所有的属性和行为,并能拓展新的能 ...

  4. java super关键字的作用_详解Java编程中super关键字的用法

    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...

  5. Java super关键字(超详细!)

    1.什么是super? super是一个关键字,全部小写. 2.怎么学?super和this对比着学习. this: this能出现在实例方法和构造方法中. this的语法是:"this.& ...

  6. Java super关键字详解

    一.super关键字作用 1:主要存在于子类方法中,用于指向子类对象中父类对象. 2:访问父类的属性 3:访问父类的函数 4:访问父类的构造函数 二. super注意的地方 this和super很像, ...

  7. Java——super关键字

    1.super是关键字,全部小写. 2.super和this对比: this: this能出现在实例方法和构造方法中. this的语法: "this." . "this ...

  8. Java super关键字:super调用父类的构造方法、利用super访问父类成员

    由于子类不能继承父类的构造方法,因此,要调用父类的构造方法,必须在子类的构造方法体的第一行使用 super() 方法.该方法会调用父类相应的构造方法来完成子类对象的初始化工作. 在以下情况下需要使用 ...

  9. [Java] super关键字:引用父类成员

    //父类 class SuperClass {     //父类无参数方法     public void show()     {         System.out.println(" ...

  10. 引用父类成员的关键字是java_[Java] super关键字:引用父类成员

    //父类 class SuperClass { //父类无参数方法 public void show() { System.out.println("this is SuperClass&q ...

最新文章

  1. 分布式mysql中间件(mycat)
  2. C语言函数集(十五)
  3. textview的基本设置
  4. 【计算理论】图灵机 ( 接受状态作用 | 格局 | 图灵机语言 | 图灵机设计复杂性 )
  5. 【android-tips】SurfaceView的制作android游戏框架介绍
  6. A wizard’s guide to Adversarial Autoencoders: Part 2, Exploring latent space with Adversarial Autoen
  7. c语言创建线程函数怎么使用方法,如何用C语言实现多线程
  8. wait_timeout【Mysql】解决方案
  9. 【Scrapy】Unsupported major.minor version 52.0 [duplicate]
  10. # 畸变矫正_别让这个细节毁了你的照片,学会正确进行畸变调整
  11. deepin v20桌面bug_深度操作系统 Deepin V20
  12. Oracle_spatial的空间操作符介绍
  13. Realme XT发布会PPT曝光:后置6400万四摄+骁龙712
  14. 1 python简介与安装
  15. 如何在html嵌入html网页
  16. 通过IO流下载Excel文件
  17. 在国内使用maven下载jar包非常慢的解决方法
  18. oracle开发的小技巧(原创)
  19. idea导入java文件_怎么在idea中导入Java文件并运行文件
  20. EPS格式转黑白照片(高清晰版本)

热门文章

  1. HDU2072 单词数(字典树)
  2. C# 文件读写系列二
  3. 实操指南|数据分析遇上餐饮业
  4. JavaScript中JSON的处理心得
  5. NGINX(二)内存池
  6. Linux系统磁盘管理基本知识
  7. 双击获取GridView控件行信息
  8. Linux下编写C程序( GCC )
  9. java位图去重_Redis系列(3) Bloom/BitMap/Geo
  10. 在Tomcat中部署web项目的三种方式