目录
1.1个人通讯率(一)
1.2 程序设计思路
1.3关键技术
1.3.1 面向对象的基本概念
1.3.2 类的定义
1.4个人通讯率(一)设计步骤
1.4.1定义类Contract
1.4.2定义类Family
1.4.3定义类Partner
设计简单的个人通讯录系统(一),用于存储联系人信息,实现对联系人按照基本联系人、家人、工作伙伴等进行分类存储,具体要求如下:
(1)联系人的基本信息包括姓名、性别、电子邮件及若干个联系电话;
(2)家人除具有联系人基本信息之外,还需要定义家庭地址及生日;
(3)工作伙伴除具有联系人基本信息之外,还需要添加所在公司及职称/职务信息。
实体对象可以看作是具有内部属性及功能的构件,通过封装技术隐藏实体内部的信息及功能的实现细节。个人通讯录(一)涉及3个基本类,分别是联系人类、家人类及工作伙伴类。
联系人类封装联系人的基本信息及输出功能;家人类复用联系人类并添加特有属性,描述联系人的家庭地址与生日;工作伙伴类也复用联系人类,同时通过组合技术描述工作伙伴所在的公司及职称/职务信息。
Java是面向对象的程序设计语言,其基本思想是通过对象、类、封装、继承、多态等基本概念进行程序设计,它是从现实世界中存在的客观事物(即对象)出发构建软件系统的。
对象:作为构成系统的基本单位,对象是由数据及其行为所构成的封装体。对象包含3个基本要素,分别是对象标识、对象状态和对象行为。每一个对象必须有一个名字,以区别于其他对象,这就是对象标识;状态用来描述对象的某些特征;对象行为用来封装对象所拥有的业务操作。
例如,联系人Contract对象包含姓名、性别、电子邮件及联系电话等基本状态信息,同时还具有打印输出的行为特征。
类:对同类对象进行抽象形成类,它为属于该类的所有对象提供了统一的抽象描述,其内部包括状态和行为两个主要部分。类也可以被认为是一种自定义的数据类型,可以使用类定义变量,所有通过类定义的变量都是引用变量,它们将会引用到类的实例,即对象。
封装:封装是一种信息隐蔽技术,通过封装将对象的状态和行为结合成一个独立的模块,尽可能隐藏对象的内部细节(包括对象内部的私有状态及行为的具体实现)。封装的目的在于把对象的设计者与使用者分开,作为使用者不必了解对象内部的实现细节,只需要使用设计者提供的行为方法实现功能即可。
继承:继承表示类之间的层次关系。继承关系使得子类对象可以共享父类对象的状态和行为。继承又可分为单继承(一个子类仅拥有一个父类)和多继承(一个子类可以拥有多个父类),Java语言支持类的单继承,而C++允许多继承。在程序设计过程中通过继承性,一方面得到了类的层次等级结构;另一方面,通过类的继承关系可以使公共的状态和行为特性得到共享,提高了软件的重用性
多态:多态性是指同名的行为方法可在不同的类中具有不同的实现。在子类继承父类的同时,类的方法实现可以进行扩充或者修改,使子类的同名方法更适合子类对象。如父类图形(Shape)的绘图方法draw(),在其子类圆形(Circle)和正方形(Square)都具有同名的绘制方法draw(),但是绘制的内容和方式都是不同的。
类是一个自定义的引用型数据类型,可以采用如下格式实现类的定义:
[public|abstract|final] class 类名{
[初始化块的定义;]
[成员变量的定义;]
[方法的定义;]
}
public、abstract、final称为修饰符,分别用于定义类的访问限、抽象类及最终类等属性。方括号([ ])表示可选项。类名必须是合法的Java标识符。为了提高程序的可读性,Java的类名通常由若干个有意义的单词组成,每个单词首字母大写,其余字母全部小写。
大括号({ })之间的内容称为类体,主要包括3部分:初始个块、成员变量的定义、方法的定义。类中各成员之间的定义顺序没有任何影响,各成员间可以互相调用。初始化块用于对类对象进行初始化操作;成员量用于定义同类对象具有的状态数据;方法则定义类的行为特征或功能实现。
关于类与对象和成员方法的知识可以参考下方文章:
Java学习笔记(十一):类与对象_她与剑意皆失的博客-CSDN博客目录概念:提出需求:使用老知识解决:使用新知识解决:类和对象的区别和联系:属性/成员变量/字段:基本介绍:案例分析:注意事项和细节说明:如何创建对象?如何访问属性?基本语法类和对象的内存分配机制:Java 内存的结构分析Java 创建对象的流程简单分析概念:对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一个模板,它描述一类对象的行为和状态。提出需求:https://blog.csdn.net/long_0901/article/details/120170776?spm=1001.2014.3001.5501
Java学习笔记(十二):成员方法_她与剑意皆失的博客-CSDN博客_java成员方法怎么写基本介绍在某些情况下,我们要需要定义成员方法(简称方法)。比如人类:除了有一些属性外( 年龄,姓名..),我们人类还有一 些行为比如:可以说话、跑步..,通过学习,还可以做算术题。这时就要用成员方法才能完成。现在要求对 Person 类完善。成员方法的定义public(访问修饰符) 返回数据类型 方法名(形参列表..) {//方法体 语句;return 返回值;}解释:(1) 形参列表:表示成员方法输入eg:person(int n) , getSum(int...https://blog.csdn.net/long_0901/article/details/124282927?spm=1001.2014.3001.5501
完成类的Contract的定义:
(1)包含姓名(name)、性别(gender)、电子邮件(email)、若干个联系电话(phones)等实例变量。
(2)为每个实例变量生成getter方法及setter方法,其中姓名不能为空。
(3)为联系人定义3个构造方法:默认构造方法、包含所有成员变量的构造方法、包含姓名及联系电话的构造方法。
(4)定义display()方法,输出成员变量的详细信息。
import static java.lang.Character.getName;
public class Contract {
private String name;
private String gender;
private String email;
private String[] phones;
public String getName() {
return name;
}
public void setName(String name) {
if(name==null||name.equals(""))//姓名不能为空
return;
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String[] getPhones() {
return phones;
}
public void setPhones(String[] phones) {
this.phones = phones;
}
public Contract(String name, String gender, String email, String[] phones) {
super();
setName(name);
setGender(gender);
setEmail(email);
setPhones(phones);
}
public Contract() {
}
public Contract(String name,String[] phones) {
this(name,"","",phones);
}
public void display() {
System.out.println("姓名:" + getName() + "\t性别:" + getGender() + "\temail:" + getEmail());
System.out.print("联系电话:");
for (int i = 0; i < phones.length; i++) {
System.out.print(phones[i] + "\t");
}
System.out.println();
}
public static void main(String[] args){
Contract c = new Contract("卢海龙",new String[]{"666666","888888","0376-10010"});
c.display();
}
}
根据继承关系定义家庭联系人类Family:
(1)除了从父类Contract继承的实夜变量之外,类Family还需要定义家庭地址(address)及生日(birthday)这两个成员变量。
(2)为每个成员变量生成getter及seter方法。
(3)为类Family定义两个构造方法,通过调用父类的构造方法实现对象的初始化。
(4)重写父类的display()方法,实现子类对象的输出。
package chap05;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Family extends Contract{
private Date birthday;
private String address;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Family(String name, String gender, String email, String[] phones, Date birthday, String address) {
super(name, gender, email, phones);
setAddress(address);
setBirthday(birthday);
}
public Family() {
super();
}
public Family(String name, String[] phones) {
super(name, phones);
}
public void display(){
super.display();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("出生日期:"+sdf.format(getBirthday())+"\t家庭地址:"+getAddress());
}
public static void main(String[] args){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try{
Family f = new Family("卢海龙","男","[email protected]",new String[]{"123456","888888"},sdf.parse("2002-09-01"),"河南省信阳市");
f.display();
}catch (ParseException e){
e.printStackTrace();
}
}
}
定义工作伙伴类Partner及其所在的公司类Company。
(1)实现公司类Companv的定义。
(2)通过继承定义合作伙伴类Partner,添力其所在公司(company)及职称/职务(title)成员变量。
(3)为每个成员变量生成getter及setter方去。
(4)为类Partner定义两个构造方法,通过调用父类的构造方法实现对象的初始化。
(5)重写父类的display()方法,实现子类对象的输出。
package chap05;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Partner extends Contract{
private String title;
private Company company;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
public Partner(String name, String gender, String email, String[] phones, String title, Company company) {
super(name, gender, email, phones);
setTitle(title);
setCompany(company);
}
public Partner() {
super();
}
public Partner(String name, String[] phones) {
super(name, phones);
}
public void display(){
super.display();
System.out.println("职务:"+getTitle()+"\n工作单位:"+getCompany());
}
public static void main(String[] args){
Partner p = new Partner("卢海龙","男","[email protected]",new String[]{"666666","888888"},
"Java工程师",new Company("阿里巴巴","上海浦东新区","0376-10001","0376-10002"));
p.display();
}
}