第一:子类的构造过程中必须调用其基类的构造方法

第二:如果子类的构造方法中没有显示地调用基类的构造方法,则系统默认调用基类

无参数的构造方法

第三:如果子类构造方法中既没有显式调用基类的构造方法,而基类中有没有无参数的构造方法,则编译出错

package mashibing;

public class TextSupSub {

/**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  SubClass sc1 = new SubClass();
  SubClass sc2 = new SubClass(400);

}

}

class SuperClass {
 private int n;
 
 SuperClass() {
  System.out.println("SuperClass()");
  this.n = n;
 }
 
 SuperClass(int n) {
  System.out.println("SuperClass("+n+")");
 }
 
}

class SubClass extends SuperClass {
 private int n;
 
 SubClass(int n) {
  System.out.println("SubClass("+n+")");
 }
 
 SubClass() {
  super(300);//必须写到第一句
  System.out.println("SubClass()");
  
 }
}

首先看这个程序main中的SubClass sc1 = new SubClass();很显然其调用了子类SubClass中的SubClass()方法,

注意该方法的第一句就调用了父类SupClass的SupClass(int n)方法;这一点很好理解。但如果把super(300)给注释掉或者去掉,此时运行的结果第一句就是SuperClass(),也就是符合第二条规则。其实此时子类的

SubClass() {
  super(300);//把这一句去掉
  System.out.println("SubClass()");
  
 }就相当于

SubClass() {
  super();//调用了基类中无参数的构造方法
  System.out.println("SubClass()");
  
 }

如果去掉此句的同时把基类的SupClass()也给去掉,则就符合第三条规则了,运行一定出错。

同理分析可知子类中的这一方法: 
 SubClass(int n) {
  System.out.println("SubClass("+n+")");
 }
 
就等同于

SubClass(int n) {

SupClss();
  System.out.println("SubClass("+n+")");
 }

另外还有一个有意思的现象就是当把

SuperClass() {
  System.out.println("SuperClass()");

}

此句给去掉时子类中(就本程序而言)的SubClss(int n)方法肯定会报错,因为系统在父类中找不到没有参数的构造方法,

如果在该方法的第一句写super(n);(n代表一个整数)就不会错了。

也就是说:如果父类中没有无参数的构造方法,而且子类的构造方法中没有调用父类的其他(有参数的方法,那么就出错了)结合第三条不难理解。

从一个程序看继承的有关细节及规则(学习马士兵视频的总结)相关推荐

  1. 一个程序看fputc和fgetc

    在文章的开始,我们先来学习一下gatchar函数. getchar:本意出入一个字符,只能输入一个字符,这点很重要. fputc:把字符写到对应的文件中,注意这里是字符. fgetc:输入一个字符,说 ...

  2. 怎么测量一个程序的启动时间?

    时间肯定时测不准的.我们只能大致测量一个值. 哪些因素会影响一个程序的启动时间? CPU的主频?操作系统的调度算法(进程的优先级),应用程序的大小(运行时所占用资源(内存,计算资源)的多少)等. 就程 ...

  3. 我要嫁给一个程序员你们怎么看?

     程序员是什么?视乎很神奇的物种?嫁就嫁呗,有什么稀奇的?这里列出N个事例: 1,住酒店,进房间第一件事,把我按门口--别想太美:他会要求我看清门后逃生示意图,并口述一遍如何快速找到楼梯. 2,去 ...

  4. 编写一个程序,反映病人到医院看病,排队,看医生的情况。

    /* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 2 日 ...

  5. 按要求编写一个Java应用程序:(1)定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。(2)编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性

    (1)定义一个类,描述一个矩形,包含有长.宽两种属性,和计算面积方法. public class Jvcs {private int Long; //长private int wide; //宽pub ...

  6. 黑马程序员—编程实现:猫和狗都会叫,但猫是喵喵的叫,狗是汪汪的叫?定义一个动物类,在动物类(animal)中有一个叫的抽象方法。 写两个子类,一个猫一个狗, * 继承自动物类,并实现相应的抽象方法。

    ------ Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------package com.itheima; /*  *第9题:   * 编程实现:猫和狗都会叫,但 ...

  7. C++设计一个程序,反映病人到医院看病、排队看医生的过程。

    #include <stdio.h> #include <malloc.h> #include <string.h> typedef struct Lnode  { ...

  8. 程序人生--一个程序员对学弟学妹建议

    我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶.我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心.而许多搞不清指针是咋回事的B ...

  9. 一个程序员多年的收藏

    程序员珍藏的东西会是什么?呵呵,除了平时写的代码,就是那些百看不厌的电子书了. 昨天很郁闷,我用了5年的移动硬盘,莫名奇妙的坏掉了.里面40G的资料全部报销了. 为了不再重蹈覆辙,我决定把重要的电子书 ...

  10. 一个程序员的多年珍藏--收藏

    2010 - 01 - 15 [置顶] 一个程序员的多年珍藏(1月23日最新更新) 文章分类:Java编程 程序员珍藏的东西会是什么?呵呵,除了平时写的代码,就是那些百看不厌的电子书了. 昨天很郁闷, ...

最新文章

  1. 图像翻译 相关 跨物种
  2. 改变手机浏览器(iPhone/Android)上文本输入框的默认弹出键盘
  3. OpenCV3编程入门(毛星云)之基于OpenCV的边缘检测
  4. python matplotlib设置字体_Matplotlib中修改字体属性
  5. numpy——axis
  6. hadoopstreaming
  7. 图解:一句“我喜欢你”在网络中经历了什么
  8. ColorPix 简单好用的屏幕取色小工具
  9. 瑟瑟发抖小网工之ISIS协议
  10. 2022年 6 款最佳免费电子邮件营销软件
  11. visio输出论文用矢量图
  12. 等比数列和等差数列求和公式
  13. 不用第三方实现外网访问
  14. html中background标签作用,CSS Background 属性详解
  15. phpStudy点击phpadmin出404窗口的解决办法
  16. 应用场景一:西门子PLC通过桥接器连接MQTT服务器
  17. 什么是拼多多上货助手?拼多多上货助手有哪些功能?详细介绍
  18. 信息学切题记录:永远的A+B Problem(洛谷P1001)
  19. excel应用(1)
  20. mocha 测试 mysql_GitHub - WePoem/lei: 整合Express mysql ioredis ejs 的一开发框架,使用mocha对api进行测试...

热门文章

  1. idesk卸载教程_iDesk助手使用帮助
  2. 软件测试测试用例编写 不超过7步骤_软件测试(功能、接口、性能、自动化)详解...
  3. HTML:HTML界面实现HTML代码编译运行界面
  4. iframe中的右键 禁止_网站排名优化中必须要注意的事项
  5. Google的Guava开发库快速快速入门
  6. js 关闭子页面刷新父页面
  7. CVPR2022 | 利用域自适应思想,北大、字节跳动提出新型弱监督物体定位框架
  8. 3D人脸重建算法汇总
  9. 【3.2】抽象基类(abc模块)
  10. Android 里的adb命令