Java学习笔记7---父类构造方法有无参数对子类的影响
子类不继承父类的构造方法,但父类的构造方法对子类构造方法的创建有影响。
具体来说就是:
①.当父类没有无参构造方法时:
1).子类也不能有无参构造方法;
2).且必须在子类构造方法中显式以super(参数)的形式调用父类构造方法;
否则会出现如下的错误:
Implicit super constructor Person() is undefined for default constructor. Must define an explicit constructor
3).子类在有参构造方法中显式调用super(参数)后,如果再写一个无参构造方法,则会出现下面的错误:
Implicit super constructor Person() is undefined. Must explicitly invoke another constructor
②.父类有无参构造方法时:
1).子类可以有无参构造方法;
2).也可以有有参构造方法;在有参构造方法中,可以用super显式调用父类构造方法也可以不调用;
也就是说,这时候,子类在构造方法的创建上是比较自由的。
下面是简单示例:
有两个类,Person类和Student类,Student类继承自Person类。两个类的构造方法详见代码。
Person类:
package human; public class Person {
String name;
int age;
String gender; private String hobby; public Person() { } public Person(String n, String g) {
this.name = n;
this.gender = g;
} public Person(String n, int a, String g, String h) {
this.name = n;
this.age = a;
this.gender = g;
this.hobby = h;
} public void setName(String n) {
this.name = n;
} public void setAge(int a) {
this.age = a;
} public void setGender(String g) {
this.gender = g;
} public void setHobby(String h) {
this.hobby = h;
} public String getName() {
return this.name;
} public int getAge() {
return this.age;
} public String getGender() {
return this.gender;
} public String getHobby() {
return this.hobby;
} public void informationPrint() {
System.out.println("My name is " +getName());
System.out.println("I am " + getAge() +" years old"); if(getGender() == "female")
System.out.println("I am a girl");
else
if(getGender() == "male")
System.out.println("I am a boy");
else
System.out.println("Something is wrong!");
System.out.println("My hobby is " + hobby);
} }
Student类:
package human; public class Student extends Person {
String stuNumber;
int score; public Student() { } public Student(String n, String g) {
super(n,g);
} public Student(String n, int a, String g, String h) {
super(n,a,g,h);
} public Student(String sN, int s) {
this.stuNumber = sN;
this.score = s;
} public Student(String n, String g, String sN, int s) {
super(n,g);
this.stuNumber = sN;
this.score = s;
} public Student(String n, int a, String g, String h, String sN, int s) {
super(n,a,g,h);
this.stuNumber = sN;
this.score = s;
} public void setStuNumber(String num) {
this.stuNumber = num;
} public void setScore(int s) {
this.score = s;
} public String getStuNumber() {
return this.stuNumber;
} public int getScore() {
return this.score;
} public void informationPrint() {
super.informationPrint();
System.out.println("My number is " + stuNumber);
System.out.println("My score is " + score);
} }
测试类:
package human; public class TestMain { public static void main(String[] args) {
Person xiaoxiP = new Person("xiaoxiP",29,"female","piano");
Person xiaonanP = new Person("xiaonanP","male");
Student xiaoxiS = new Student("xiaoxiS",28,"female","piano","124",90);
Student xiaonanS = new Student("xiaonanS","male","123",98); xiaoxiP.informationPrint();
xiaoxiS.informationPrint(); xiaonanP.informationPrint();
xiaonanS.informationPrint();
} }
结果:
My name is xiaoxiP
I am 29 years old
I am a girl
My hobby is piano
My name is xiaoxiS
I am 28 years old
I am a girl
My hobby is piano
My number is 124
My score is 90
My name is xiaonanP
I am 0 years old
I am a boy
My hobby is null
My name is xiaonanS
I am 0 years old
I am a boy
My hobby is null
My number is 123
My score is 98
总结(追加):
①.父类没有无参构造方法时,子类也不能有无参构造方法,必须用super显式调用父类构造方法。
②.父类没有无参构造方法且有多个有参构造方法时,子类可以只显式调用父类的一个构造方法;
子类也可以构造多个构造方法,只要保证每个构造方法都显式调用了父类构造方法就可以,对于调用父类哪一个构造方法则没有要求。
③.父类有无参构造方法时,子类可以有无参构造方法,也可以有有参构造方法;
既可以用super显式调用父类构造方法,也可以不用super显式调用。
待学习:访问权限修饰符的问题。
Java学习笔记7---父类构造方法有无参数对子类的影响的更多相关文章
- 【Java学习笔记】函数的可变参数
package p2; public class ParamterDemo { public static void main(String[] args) { int sum1 = add(4,5) ...
- Java学习笔记之---构造方法
Java学习笔记之---构造方法 (一)构造方法的特性 构造方法不能被对象单独调用 构造方法与类同名且没有返回值 构造方法只能在对象实例化的时候被调用 当没有指定构造方法时,系统会自动添加无参的构造方 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记09--反射机制
java学习笔记09--反射机制 什么是反射: 反射是java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取他所有的成员变量和方法并且显示出来 ...
- java学习笔记08--泛型
java学习笔记08--泛型 泛型可以解决数据类型的安全性问题,它主要的原理,是在类声明的时候通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化的时候只要指定好需 ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
随机推荐
- JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
MySQL到Redis数据复制方案 无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来 ...
- Django的url使用方法
利用Django开发站点.能够设计出很优美的url规则,假设url的匹配规则(包括正則表達式)组织得比較好,view的结构就会比較清晰.比較easy维护. 最简单的形式 from django.con ...
- SharePoint 集成OWA概述
简介 OWA服务,也就是Office Web Application,微软提供的可以在线查看和编辑Office系列文档的服务,包括Word/Excel/PPT/OneNote.我们可以通过OWA服务和 ...
- JavaScript获取浏览器版本等信息
** 不同浏览器版本可能存在差异,使用时请测试自己的环境 ** 测试时各个浏览器版本 IE: 11.953.14393.0 Edge: Microsoft Edge 38.14393.0.0;Micr ...
- ServerSuperIO Designer IDE 发布,打造物联网通讯大脑,随心而联。附:C#驱动源代码。
1.概况 注:ServerSuperIO Designer IDE 同行业网友随便使用,不涉及到软件使用限制的问题. 从2015年到现在的将近两年的时间,一直在开发.完善ServerSuperIO(S ...
- Maven版本号中隐藏的惊天大秘密
一.背景 现在主流的Java系的互联网公司里,绝大多数公司都使用Maven作为依赖管理工具,一般我们对于依赖的版本号,常见两种类型:一种以“-RELEASE”结尾,另一种以“-SNAPSHOT”结尾. ...
- 【HTML5】input元素type属性值
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- cell上添加倒计时,以及时差问题的解决
原址 http://www.cnblogs.com/zhangmaliang/p/5102518.html 最近项目中用到了tableView的多个cell倒计时系统问题,本觉得很简单的一个事,一做发 ...
- sharepreference使用教程
1.应用 SharePreference主要用于保存一些数据,比如用户登录后的user_id,user_mobile,这样就可以做自动登录了,每次判断SharePreference中有没有数据,有的话 ...
- 关于Qt Designer程序/UI文件打开未响应的解决方法
最近完成一个项目,到最后关头用QtCreator无法打开UI文件,每次都未响应,用QtDesigner也无法启动 这个问题把我折磨了半天,最后才知道原来是要删除C:\Users\Administrat ...