您的位置:首页 > 职场人生

黑马程序员--类成员方法的重载与覆盖

2015-03-08 18:05 155 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——

类成员方法的重载与覆盖

一、在子类继承父类成员的同时,子类自己还可以定义新的成员。当子类中定义的新成员变量与父类中某个成员变量的名字相同时,子类会把父类中的相应成员变量隐藏起来。当子类中定义的成员方法与父类中某个成员方法的名字相同时属于成员方法的重载或覆盖,这是常用的程序设计技术。

1、重载与覆盖

在子类中,除了从父类继承的成员方法之外,还可以自定义一些成员方法,其中主要包括下列几种形式:

-在父类中没有的、全新的成员方法。

-对父类中已有的成员方法进行重载。

-对父类中已有的成员方法进行覆盖。

1.1成员方法的重载

成员方法的重载是指当子类中定义与父类中同名的成员方法,但参数列表不同,或者在一个类中定义多个同名的成员方法,但它们之间的参数列表不同。无论是在子类与父类之间重载成员方法,还是在一个类中重载成员方法,其主要目的都是为了扩展操作的接口格式,使之更加适于人们的操作习惯,提高软件系统操作的方便性与灵活性。

EmployeeClass { // 雇员类

private String name; // 姓名

private double salary; // 工资

private String department; // 部门

…… // 其他成员方法

public void setInfo (String name, double salary, String department) {

this.name = new String(name);

this.salary = salary;

this.department = new String(department);

}

}

public ManagerClass extends EmployeeClass { // 经理类

private double special; // 特殊津贴

…… // 其他成员方法

public void setInfo(String name, double salary,

String department, double special) {

super(name, salary, department);

this.special = special;

}

}

1.2成员方法的覆盖

当子类中定义的成员方法与父类中某个成员方法的名称与参数列表完全一样时被称为成员方法的覆盖。在Java中,成员方法的名称与参数列表统称为签名。其主要原因是父类中成员方法提供的操作功能不能满足子类的需求,采用覆盖手段将父类中相应的成员方法隐藏起来,而用子类中定义的成员方法替代。

在定义具有覆盖特征的成员方法时,通常有下面两种形式:

->在子类定义的成员方法中,首先调用父类中被覆盖的成员方法,再添加一些操作语句,这种形式可以达到对父类被覆盖成员方法的功能给予补充、增强。

->在子类定义的成员方法中,没有调用父类中被覆盖的成员方法,而是全新的语句组,这种形式可以达到对父类被覆盖成员方法的全部覆盖。当子类对象的某项操作与父类对象相应的操作过程完全不同时,常常采取这种方式实现。

public class ComplexNumber{ // 复数类

private double re; // 实部

private double im; // 虚部

public ComplexNumber() { … }

public ComplexNumber(double re, double im) { … }

public void setRe(double re) { … }

public void setIm(double im) { … }

public double getRe() { … }

public double getIm() { … }

public boolean equals(Object otherObject) {

if (this == otherObject) return true; // 是否引用同一个对象

if (otherObject == null) return false; // otherObject是否为空

if (getClass() != otherObject.getClass()) // 是否属于同一个类型

return false;

ComplexNumber other = (ComplexNumber)otherObject;

if ((re == other.re) && ( im == other.im)) return true;

else return false;

}

public String toString() { … }

}

ComplexNumber c1,c2;

c1 = new ComplexNumber(2,3);

c2 = new ComplexNumber(2,-3.4);

if (c1.equals(c2)) {

System.out.println(“(” + c1 + “) == (” + c2 + “)”);

}

else {

System.out.println(“(” + c1 + “) <> (” + c2 + “)”);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: