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内存模型——volatile
			
volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会非常特别. 理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁 ...
 - HDU_1698 Just a Hook(线段树+lazy标记)
			
pid=1698">题目请点我 题解: 接触到的第一到区间更新,须要用到lazy标记.典型的区间着色问题. lazy标记详情请參考博客:http://ju.outofmemory.cn ...
 - 002Java概述
			
1Sun(Stanford University Network )公司1995年推出的高级编程语言 2.面向Internet的编程语言 3.已经成为web应用程序的首选开发语言 4.完全面向对象简单 ...
 - MPSOC之9——host、embeded间tftp、nfs、ftp环境搭建
			
tftp 可传输单个文件,不能传文件夹 需要通过命令传输文件,略显复杂 ==一般调试kernel时,用uboot通过tftp方式启动,不用每次都烧写存储介质== nfs 在host linux(ubu ...
 - redis的事务(简单介绍)
			
1.简单描述 redis对事务的支持目前还是比较简单.redis只能保证一个client发起的事务中的命令是可以连续的执行,而中间不会插入其他client的命令.由于redis是但现场来处理所有cli ...
 - IntelliJ IDEA创建java项目
			
IntelliJ IDEA创建java项目 进入到IntelliJ IDEA启动界面,点击Create New Project 2.这样就进入到了创建项目页面,这里可以创建好多项目,这里我们以java ...
 - SparkStreaming读取Kakfa数据时发生OffsetOutOfRangeException异常
			
参考文章:http://www.jianshu.com/p/791137760c14 运行SparkStreming程序一段时间后,发现产生了异常: ERROR JobScheduler: Error ...
 - spring cloud sidecar
			
用spring cloud sidecar的整合异构语言,以前做过没有做笔记,现在再做由于各种坑又浪费了一天,这里记一下 首先是官网:http://cloud.spring.io/spring-clo ...
 - JavaWeb之ssm框架整合,用户角色权限管理
			
SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...
 - ios 去掉字符串中的空格 和指定的字符
			
[问题分析] .使用NSString中的stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]方法只是去掉左右 ...