目录
前言
继承是面向对象语法的三大特征之一。继承可以降低代码编写的冗余度,提高编程的效率。通过继承,子类获得了父类的成员变量和方法。那么在继承关系下,构造方法的访问特点是怎样的呢,今天让我们来学习一下。
继承
首先让我们来回顾一下继承:
1.概念
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
2.继承的作用
通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。
举个例子:一个公司里有普通的程序员,项目经理,保洁,保安,财务等等角色,那么如果我们需要开发一个公司管理系统那么就需要将他们的各项信息都储存起来,这时候我们发现他们大部分的信息都是重复的,如果我们不适用继承的知识,代码的冗余性就会很高,那么如何解决这样的问题呢?就需要我们运用到继承的思想。
我们先来创建一个父类——职员:
父类:
public class Clerk { protected String workId; protected String name; protected double wage; protected double bonus; public String getWorkId() { return workId; } public void setWorkId(String workId) { this.workId = workId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getWage() { return wage; } public void setWage(double wage) { this.wage = wage; } public double getBonus() { return bonus; } public void setBonus(double bonus) { this.bonus = bonus; } }
我们可以看到父类(公司成员)里的属性有:工号(workId),姓名(name),工资(wage),奖金(bonus)的属性,并且已经写好了get(),set() 方法。
那么我们的父类就创建好了,接下来我们需要让子类(程序员,项目经理……)去继承父类里的这些属性,这时候我们就需要用到构造方法。
构造方法
1.概念
构方法是一种特殊的“成员方法”,就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。
2.构造方法的作用:
1.构造出来一个类的实例
2.对构造出来个一个类的实例(对象)初始化
现在我们来写两个构造方法(有参和全参):
public class Clerk { protected String workId; protected String name; protected double wage; protected double bonus; public String getWorkId() { return workId; } public void setWorkId(String workId) { this.workId = workId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getWage() { return wage; } public void setWage(double wage) { this.wage = wage; } public double getBonus() { return bonus; } public void setBonus(double bonus) { this.bonus = bonus; } public Clerk(String workId, String name, double wage, double bonus) { super(); this.workId = workId; this.name = name; this.wage = wage; this.bonus = bonus; } public Clerk() { super(); // TODO Auto-generated constructor stub } }
再创建一个子类(项目经理,比父类多了一个工作内容(workContent)属性):
public class Manager extends Clerk{ private String workContent; public String getWorkContent() { return workContent; } public void setWorkContent(String workContent) { this.workContent = workContent; } public Manager() { super(); // TODO Auto-generated constructor stub } public Manager(String workId, String name, double wage, double bonus) { super(workId, name, wage, bonus); // TODO Auto-generated constructor stub } public Manager(String workId, String name, double wage, double bonus, String workContent) { super(workId, name, wage, bonus); this.workContent = workContent; } }
我们发现子类继承了父类,若父类的构造方法没有重载,那么子类的构造方法也不需要通过super调用父类构造方法。一个类中如果构造方法重写了并且带了参数,那么这个类的原来系统默认的无参构造方法便消失。由此,若一个父类中只有一个带参数的构造方法,那么在写其子类的构造方法时必须先通过super调用父类的构造方法才能完成子类的构造方法而且super只能写在子类构造方法体内的第一行。
总结:
由此我们得出:
1.构造方法的特点:
a.子类构造方法中如果没有显示的写super(参数),则默认赠送一个super();//调用父类
b. 如果显示的写了super(参数)则不再赠送super();
c. super(参数)必须是第一个语句
创建子类对象的时候,一定会调用到覆盖的构造方法。
2.super关键字的三种用法:
super.父类的成员变量
super.父类的成员方法
super(参数);调用父类的构造方法
3.this关键字的三种用法:
this.本类成员变量
this.本类成员方法
this(参数);//调用本类的其他构造方法
4.注意事项:
a.构造方法不能递归调用
b.this(参数)必须是第一个语句
c.必须写在构造方法中