Java的继承与多态

Java的继承与多态对于提高开发效率,减少开发量,是非常有帮助的,也便于代码维护。下面是根据书上讲的,我又做了改进的例子。

假设需求:

公司需要对所有人员进行管理,所有人员分为普通员工和经理人,他们的头衔、工资、生日等信息都是不一样的,但是不能开发两套系统分别进行管理,而是要一套系统完成对所有人的管理。

设计一个员工类,这是父类,定义如下:

package com.myHelloWorld;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Employee {
	private String name;
	private double salary;
	private Date birthday;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public void setBirthday(String birthday) {
		SimpleDateFormat simleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		try {
			this.birthday = simleDateFormat.parse(birthday);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

这里首先实现了对所有人员进行管理的方法。对普通员工的管理,只要实例化若干个一个对象即可进行管理,但是对经理的管理,需求不同,因此,要创建子类,从这里继承:

package com.myHelloWorld;

public class Manager extends Employee{
	private double bonus;

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return super.getName() + "经理";
	}

	public double getBonus() {
		return bonus;
	}

	public void setBonus(double bonus) {
		this.bonus = bonus;
	}

}

现在,只需要对它们进行分别管理就可以了,创建一个测试单元,如下:

package com.myHelloWorld;

import java.util.Date;

public class EmployeeTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Employee empolyee = new Employee();
		empolyee.setName("Java");
		empolyee.setSalary(1000);
		empolyee.setBirthday(new Date());

		Manager manager = new Manager();
		manager.setName("编程高手");
		manager.setSalary(3000);
		manager.setBirthday(new Date());
		manager.setBonus(2000);

		System.out.println("员工的姓名:" + empolyee.getName());
		System.out.println("员工的工资:" + empolyee.getSalary());
		System.out.println("员工的生日:" + empolyee.getBirthday());
		System.out.println("经理的姓名:" + manager.getName());
		System.out.println("经理的工资:" + manager.getSalary());
		System.out.println("经理的生日:" + manager.getBirthday());
		System.out.println("经理的奖金:" + manager.getBonus());

		empolyee.setBirthday("1980-10-12");
		manager.setBirthday("1970-01-23");

		System.out.println("更新员工的生日为:" + empolyee.getBirthday());
		System.out.println("更新经理的生日为:" + manager.getBirthday());
	}

}

分别对员工类和经理类进行实例化,也就是创建这么两个人,即可对他们的姓名、头衔、工资、生日等进行管理。

这是输出截图:

这就是继承,也包含了重写。

大家可能注意到了,在设置人员生日的时候,我们的第一套方法强制要求输入Date类型的数据才能识别,这在许多场合并不方便,而且需要做很多额外的处理工作,那么我们再创建一个这个方法的重载,允许以『yyyy-MM-dd』的格式输入生日,这样就方便多了,也直观多了。

这就是多态。

时间: 2024-10-27 08:49:19

Java的继承与多态的相关文章

Java面向对象㈡ -- 继承与多态

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆盖的概念.覆盖被用来支持多态.实际开发中Java通常继承于抽象类,实现于接口.如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰.这里只说明两个问题:1,重载和覆盖的区别重载和覆盖的区别:重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类

[转]Java中继承、多态、重载和重写介绍

什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型.继承是面向对象的三个基本特征--封装.继承.多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类.超类),如果

黑马程序员----java基础----继承与多态,附相关面试题

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一:继承(掌握) (1)把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系, 这多个类就具备了这些内容.这个关系叫继承. (2)Java中如何表示继承呢?格式是什么呢? A:用关键字extends表示 B:格式: class 子类名 extends 父类名 {} (3)继承的好处: A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关

Java基础继承与多态

Java基础第九天 继承概述 引入 首先我来写两个代码: //定义学生类 class Student {     public void study(){ System.out.println("在教室学习"); } } //定义老师类 class Teacher { public void teach(){ System.out.println("在教室教书"); } } 我们观察上面两个代码: 发现name,age成员变量,以及getXxx()/setXxx()

java中继承和多态

转自原文http://blog.csdn.net/xinxin19881112/article/details/2944760 若冒犯博主,请勿见怪! 1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更一般的特征和行为,而子类除了具有父类的特征和行为,还具有一些自己特殊的特征和行为. 在继承关系中.父类和子类需要满足is-a的关系.子类是父类. 表

Java的继承和多态

1.继承 //创建Pet父类 public class Pet { private String name; private int     age; private int  health; private String love; public Pet(){ //System.out.println("父类无参构造方法"); } public Pet(String name,int age,int health,String love){ this.name   =   name;

Java基础学习小记--多态

题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓“早起毁一天”不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我,昨日头脑顿路,Java的继承与多态,看得我是有点小懵逼.其实大致是懂了,不过到了具体应用中,特别是比较复杂的继承和调用关系的时候些许迷路.好了,话不多说,明日再把继承和多态来个总结,今日先对多态来个小记. ---------------------------------------------------------

Java 继承、多态与类的复用

摘要: 本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍. 首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同.紧接着,我们依据继承引入了多态.介绍了它的实现机制和详细应用.此外,为了更好地理解继承和多态.我们对final关键字进行了全面的介绍. 在此基础上.我们介绍了Java中类的载入及初始化顺序.最后.我们对面向对象设计中三个十分重要的概念–重载.覆盖与隐藏进行了详细的说明. 要点: 继承 组合,继承,代理 多态 final 关键字 类载入及

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前