Java个人通讯录

目录

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.1个人通讯录(一)

        设计简单的个人通讯录系统(一),用于存储联系人信息,实现对联系人按照基本联系人、家人、工作伙伴等进行分类存储,具体要求如下:
        (1)联系人的基本信息包括姓名、性别、电子邮件及若干个联系电话;
        (2)家人除具有联系人基本信息之外,还需要定义家庭地址及生日;
        (3)工作伙伴除具有联系人基本信息之外,还需要添加所在公司及职称/职务信息。


1.2 程序设计思路

        实体对象可以看作是具有内部属性及功能的构件,通过封装技术隐藏实体内部的信息及功能的实现细节。个人通讯录(一)涉及3个基本类,分别是联系人类、家人类及工作伙伴类。
        联系人类封装联系人的基本信息及输出功能;家人类复用联系人类并添加特有属性,描述联系人的家庭地址与生日;工作伙伴类也复用联系人类,同时通过组合技术描述工作伙伴所在的公司及职称/职务信息。


1.3关键技术

1.3.1 面向对象的基本概念

Java是面向对象的程序设计语言,其基本思想是通过对象、类、封装、继承、多态等基本概念进行程序设计,它是从现实世界中存在的客观事物(即对象)出发构建软件系统的。

对象:作为构成系统的基本单位,对象是由数据及其行为所构成的封装体。对象包含3个基本要素,分别是对象标识、对象状态和对象行为。每一个对象必须有一个名字,以区别于其他对象,这就是对象标识;状态用来描述对象的某些特征;对象行为用来封装对象所拥有的业务操作。

例如,联系人Contract对象包含姓名、性别、电子邮件及联系电话等基本状态信息,同时还具有打印输出的行为特征。

类:对同类对象进行抽象形成类,它为属于该类的所有对象提供了统一的抽象描述,其内部包括状态和行为两个主要部分。类也可以被认为是一种自定义的数据类型,可以使用类定义变量,所有通过类定义的变量都是引用变量,它们将会引用到类的实例,即对象。

封装:封装是一种信息隐蔽技术,通过封装将对象的状态和行为结合成一个独立的模块,尽可能隐藏对象的内部细节(包括对象内部的私有状态及行为的具体实现)。封装的目的在于把对象的设计者与使用者分开,作为使用者不必了解对象内部的实现细节,只需要使用设计者提供的行为方法实现功能即可。

继承:继承表示类之间的层次关系。继承关系使得子类对象可以共享父类对象的状态和行为。继承又可分为单继承(一个子类仅拥有一个父类)和多继承(一个子类可以拥有多个父类),Java语言支持类的单继承,而C++允许多继承。在程序设计过程中通过继承性,一方面得到了类的层次等级结构;另一方面,通过类的继承关系可以使公共的状态和行为特性得到共享,提高了软件的重用性

多态:多态性是指同名的行为方法可在不同的类中具有不同的实现。在子类继承父类的同时,类的方法实现可以进行扩充或者修改,使子类的同名方法更适合子类对象。如父类图形(Shape)的绘图方法draw(),在其子类圆形(Circle)和正方形(Square)都具有同名的绘制方法draw(),但是绘制的内容和方式都是不同的。

1.3.2 类的定义

类是一个自定义的引用型数据类型,可以采用如下格式实现类的定义:

[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


1.4个人通讯录(一)设计步骤

1.4.1定义类Contract

完成类的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();
    }
}

1.4.2定义类Family

根据继承关系定义家庭联系人类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();
        }
    }
}

1.4.3定义类Partner

定义工作伙伴类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();
    }
}

猜你喜欢

转载自blog.csdn.net/long_0901/article/details/124874736