从一个程序看继承的有关细节及规则(学习马士兵视频的总结)
第一:子类的构造过程中必须调用其基类的构造方法
第二:如果子类的构造方法中没有显示地调用基类的构造方法,则系统默认调用基类
无参数的构造方法
第三:如果子类构造方法中既没有显式调用基类的构造方法,而基类中有没有无参数的构造方法,则编译出错
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代表一个整数)就不会错了。
也就是说:如果父类中没有无参数的构造方法,而且子类的构造方法中没有调用父类的其他(有参数的方法,那么就出错了)结合第三条不难理解。
从一个程序看继承的有关细节及规则(学习马士兵视频的总结)相关推荐
- 一个程序看fputc和fgetc
在文章的开始,我们先来学习一下gatchar函数. getchar:本意出入一个字符,只能输入一个字符,这点很重要. fputc:把字符写到对应的文件中,注意这里是字符. fgetc:输入一个字符,说 ...
- 怎么测量一个程序的启动时间?
时间肯定时测不准的.我们只能大致测量一个值. 哪些因素会影响一个程序的启动时间? CPU的主频?操作系统的调度算法(进程的优先级),应用程序的大小(运行时所占用资源(内存,计算资源)的多少)等. 就程 ...
- 我要嫁给一个程序员你们怎么看?
程序员是什么?视乎很神奇的物种?嫁就嫁呗,有什么稀奇的?这里列出N个事例: 1,住酒店,进房间第一件事,把我按门口--别想太美:他会要求我看清门后逃生示意图,并口述一遍如何快速找到楼梯. 2,去 ...
- 编写一个程序,反映病人到医院看病,排队,看医生的情况。
/* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 2 日 ...
- 按要求编写一个Java应用程序:(1)定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。(2)编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性
(1)定义一个类,描述一个矩形,包含有长.宽两种属性,和计算面积方法. public class Jvcs {private int Long; //长private int wide; //宽pub ...
- 黑马程序员—编程实现:猫和狗都会叫,但猫是喵喵的叫,狗是汪汪的叫?定义一个动物类,在动物类(animal)中有一个叫的抽象方法。 写两个子类,一个猫一个狗, * 继承自动物类,并实现相应的抽象方法。
------ Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------package com.itheima; /* *第9题: * 编程实现:猫和狗都会叫,但 ...
- C++设计一个程序,反映病人到医院看病、排队看医生的过程。
#include <stdio.h> #include <malloc.h> #include <string.h> typedef struct Lnode { ...
- 程序人生--一个程序员对学弟学妹建议
我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶.我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心.而许多搞不清指针是咋回事的B ...
- 一个程序员多年的收藏
程序员珍藏的东西会是什么?呵呵,除了平时写的代码,就是那些百看不厌的电子书了. 昨天很郁闷,我用了5年的移动硬盘,莫名奇妙的坏掉了.里面40G的资料全部报销了. 为了不再重蹈覆辙,我决定把重要的电子书 ...
- 一个程序员的多年珍藏--收藏
2010 - 01 - 15 [置顶] 一个程序员的多年珍藏(1月23日最新更新) 文章分类:Java编程 程序员珍藏的东西会是什么?呵呵,除了平时写的代码,就是那些百看不厌的电子书了. 昨天很郁闷, ...
最新文章
- 图像翻译 相关 跨物种
- 改变手机浏览器(iPhone/Android)上文本输入框的默认弹出键盘
- OpenCV3编程入门(毛星云)之基于OpenCV的边缘检测
- python matplotlib设置字体_Matplotlib中修改字体属性
- numpy——axis
- hadoopstreaming
- 图解:一句“我喜欢你”在网络中经历了什么
- ColorPix 简单好用的屏幕取色小工具
- 瑟瑟发抖小网工之ISIS协议
- 2022年 6 款最佳免费电子邮件营销软件
- visio输出论文用矢量图
- 等比数列和等差数列求和公式
- 不用第三方实现外网访问
- html中background标签作用,CSS Background 属性详解
- phpStudy点击phpadmin出404窗口的解决办法
- 应用场景一:西门子PLC通过桥接器连接MQTT服务器
- 什么是拼多多上货助手?拼多多上货助手有哪些功能?详细介绍
- 信息学切题记录:永远的A+B Problem(洛谷P1001)
- excel应用(1)
- mocha 测试 mysql_GitHub - WePoem/lei: 整合Express mysql ioredis ejs 的一开发框架,使用mocha对api进行测试...