Java语言入门教程(十):Java语言中的关联与依赖关系

 

在开始本文的学习前,先总结一下已经学习过的内容。在前面9篇文章中,主要是介绍Java类中的基本语法,是按照先概括,再具体的循序渐进的方式进行的。先介绍了Java类的主要组成部分:数据成员,方法成员,构造方法。然后对一些通用的知识点进行了较详细介绍,如权限访问修饰符,包,静态修饰符,数据类型等。了解了这些通用的知识点后,对于类的三个组成部分分别详细介绍,如介绍了类中各种数据的相关问题,介绍了构造方法的相关问题,介绍了方法会使用到的操作符,流程控制,以及调用方法会使用到的值传递等知识点。在了解了这些以后,初学者应该可以比较清楚的理解一个独立的Java类,。但是,在Java应用中,不可能只有一个Java类,而是会有很多Java类。这很多个Java类之间,不可能是老死不相往来的,而会是彼此协作,完成复杂功能。所以,在了解了基本知识点后,接下来,初学者应该着重学习Java语言中类与类的关系。

       在本文中,将使用简单的Java类,展示Java语言中类与类之间常见的两种关系:关联关系,和依赖关系

1、  关联关系

A关联类B的意思是,如果实例化一个A类的对象,同时,会有一个B类的对象被实例化。简言之,B作为A的属性存在。如下:

class A{

       private B b;

}

class B{

 

}

2、  依赖关系

A依赖类B的意思是,如果A的对象要完成某一操作,必须使用B的对象的某些操作来帮忙,才能完成。简言之,B作为A的某个方法的方法参数存在。如下:

class A{

       public void f(B b){

 

}

}

class B{

 

}

       关联和依赖,是面向对象编程中,最常见的两种关系。假设有这样一个场景描述:某培训中心提供免费培训课程,每门课程都有其名字以及原价。学员最多每人可以选择一门课程,学员只要登记姓名,就可以选择一门课程来学习。

       通过分析这个简单场景,可以很容易分析出,有两种对象:学员,课程。也就是说,我们应该创建两个类,Student,Course

       Course类有两个属性,课程名称和原始价格。如下:

package com.csst.relation;

 

public class Course {

       private String title;

       private double price;

       public Course(String title, double price) {

              super();

              this.title = title;

              this.price = price;

       }

       public Course(String title) {

              super();

              this.title = title;

       }

       public Course() {

              super();

       }

       public String getTitle() {

              return title;

       }

       public void setTitle(String title) {

              this.title = title;

       }

       public double getPrice() {

              return price;

       }

       public void setPrice(double price) {

              this.price = price;

       }

      

}

然后创建另外一个类,Student,该类有一个学员姓名属性name,另外,因为每个学员可以选择一门课程学习,那么就是说,每个Student对象,会有一个Course对象,即Course应该作为Student的一个属性存在,即Student关联了Course。那么,会有如下声明:

package com.csst.relation;

 

public class Student {

    private String name;

   

    //1.关联关系:Student关联Course

    private Course course;

   

    public Student(String name) {

       super();

       this.name = name;

    }

//TBD

}

继续分析,Student应该有1个行为,就是选择课程。要完成选择课程这个操作,必须得接受一个课程的对象,也就是说,Student选课这个行为,必须依赖于Course的一个对象,才能完成,所以StudentCourse之间还存在依赖关系,继续完善上边代码:

package com.csst.relation;

 

public class Student {

       private String name;

      

       //1.关联关系:Student关联Course

       private Course course;

      

       public Student(String name) {

              super();

              this.name = name;

       }

      

       //2.依赖关系:Student依赖Course

       public void chooseCourse(Course course){

              this.course=course;

       }

      

       public Course getCourse(){

              return this.course;

       }

}

 

       很多初学者,对于Course作为Student的一个属性,以及Course类型作为方法参数,作为方法返回值的类型,不能接受。总觉得只有Stringint之类才是数据类型,而Course作为一个类型存在,有些不伦不类。Java是面向对象的语言,任何一个类,就是一个类型,都可以作为数据类型存在,我们自己声明的类也不例外。也就是说,如果能理解String作为一个类型存在,就应该坦然接受Course作为一个类型存在,因为它们是一样的,都是一个类型而已,只不过StringAPI中声明的,Course是我们自己声明的。

       学习本文内容后,初学者应该又上了一个台阶,就是不再仅仅关注某个Java类的语法,而是从更高的角度去看待Java应用,去关注类与类的关系。总结一下关联和依赖关系:

1、  关联和依赖都是面向对象编程中,常用的关系。

2、  关联表示has-a关系,如学生拥有一个课程,往往表现为B作为A的属性存在(A关联B

3、  依赖表示要做一件事情,离不开某个对象。往往表现为B作为A的方法参数存在(A依赖B

4、  当开始了解类与类的关系后,就需要对类型有更深入的了解。切记,任何类都可以作为类型使用。

在本文例子中,学生只能选择一门免费课程学习,如果培训中心加大优惠力度,每个学生最多可以选择3门课程学习,应该如何维护这种关系哪?我们就不得不去了解Java语言中的一些“数据容器”对象:数组、集合。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值