两个范例

范例一——一对多关系

使用类集表示出一下关系:一个学校可以包含多个学生,一个学生只能属于一个学校,这就是一对多的关系.

School.java

import java.util.List ;
import java.util.ArrayList ;
public class School{  //定义School类
 private String name ;
 private List<Student> allStudents ;  //一个学校有多个学生
 public School(){            //无参构造
  this.allStudents = new ArrayList<Student>() ;  //实例化List集合
 }
 public School(String name){
  this() ;     //调用无参构造
  this.setName(name) ;
 }
 public void setName(String name){  //设置name属性内容
  this.name = name ;
 }
 public String getName(){    //取得name属性内容
  return this.name;
 }
 public List<Student> getAllStudents(){ //取得全部学生
  return this.allStudents ;
 }
 public String toString(){  //覆写toString()方法
  return "学校名称:" + this.name ;
 }
};

Student.java

public class Student{  //定义Student类
 private String name ;
 private int age ;
 private School school;   // 一个学生属于一个学校
 public Student(String name,int age){
  this.setName(name) ;
  this.setAge(age) ;
 }
 public void setSchool(School school){  //设置所在学校
  this.school = school ;
 }
 public School getSchool(){    //返回学生所在学校
  return this.school ;
 }
 public void setName(String name){  //设置name属性内容
   this.name = name ;
 }
 public void setAge(int age){  //设置age属性内容
  this.age = age ;
 }
 public String getName(){  //返回name属性内容
  return this.name;
 }
 public int getAge(){  //返回age属性内容
  return this.age ;
 }
 public String toString(){  //覆写toString()方法
  return "学生姓名:" + this.name + ";年龄:" + this.age ;
 }
};

TestDemo.java

import java.util.Iterator ;
public class TestDemo{  //测试类
 public static void main(String args[]){
  School sch = new School("清华大学") ;   // 实例化学校对象
  Student s1 = new Student("张三",21) ;  //实例化学生对象
  Student s2 = new Student("李四",22) ;
  Student s3 = new Student("王五",23) ;
  sch.getAllStudents().add(s1) ;      //在学校中加入学生
  sch.getAllStudents().add(s2) ;      //在学校中加入学生
  sch.getAllStudents().add(s3) ;      //在学校中加入学生
  s1.setSchool(sch) ;            //一个学生属于一个学校
  s2.setSchool(sch) ;            //一个学生属于一个学校
  s3.setSchool(sch) ;            //一个学生属于一个学校  
  System.out.println(sch) ;         //输出学校信息
  Iterator<Student> iter = sch.getAllStudents().iterator() ;
  while(iter.hasNext()){  //利用iterator接口输出学校里面全部学生信息
   System.out.println(" |- " + iter.next()) ;
  }
 }
};

范例二——多对多关系

例如:一个学生可以选多门课,每门课程可以有多个学生参加,这就是一个典型的多对多的关系。

Student.java

import java.util.List ;
import java.util.ArrayList ;
public class Student{  //定义学生类
 private String name ;
 private int age ;
 private List<Course> allCourses ;
 public Student(){    //定义无参构造
  this.allCourses = new ArrayList<Course>() ;  //实例化list集合
 }
 public Student(String name,int age){
  this() ;    //调用无参构造
  this.name = name ;  //设置name属性内容
  this.age = age ;    //设置age属性内容
 }
 public List<Course> getAllCourses(){  //取得全部课程信息
  return this.allCourses ;
 }
 public void setName(String name){  //设置name属性
  this.name = name ;
 }
 public void setAge(int age){  //设置age属性
  this.age = age ;
 }
 public String getName(){  //取得name属性内容
  return this.name ;
 }
 public int getAge(){  //取得age属性内容
  return this.age ;
 }
 public String toString(){  //覆写toString()方法
  return "学生姓名:" + this.name + ";年龄:" + this.age ;
 }
};

 Course.java

import java.util.List ;
import java.util.ArrayList ;
public class Course{  //定义课程类
 private String name ;
 private int credit ;
 private List<Student> allStudents ;
 public Course(){    //定义无参构造
  this.allStudents = new ArrayList<Student>() ;
 }
 public Course(String name,int credit){
  this() ;  //调用无参构造
  this.name = name ;  //设置name属性内容
  this.credit = credit ;  //设置credit属性内容
 }
 public List<Student> getAllStudents(){  //返回全部学生
  return this.allStudents ;
 }
 public void setName(String name){  //设置name属性
  this.name = name  ;
 }
 public void setCredit(int credit){  //设置credit属性
  this.credit = credit ;
 }
 public String getName(){  //取得name属性
  return this.name ;
 }
 public int getCredit(){  //取得credit属性
  return this.credit ;
 }
 public String toString(){  //覆写toString()方法
  return "课程名称:" + this.name + ";课程学分:" + this.credit ;
 }
};

TestMore.java

import java.util.Iterator ;
public class TestMore{
 public static void main(String args[]){
  Course c1 = new Course("英语",3 ) ; // 第一门课程
  Course c2 = new Course("计算机",5) ; // 第二门课程
  Student s1 = new Student("张三",20) ;
  Student s2 = new Student("李四",21) ;
  Student s3 = new Student("王五",22) ;
  Student s4 = new Student("赵六",23) ;
  Student s5 = new Student("孙七",24) ;
  Student s6 = new Student("钱八",24) ;
  // 第一门课程有三个学生参加
  c1.getAllStudents().add(s1) ;
  c1.getAllStudents().add(s2) ;
  c1.getAllStudents().add(s6) ;
  s1.getAllCourses().add(c1) ;
  s2.getAllCourses().add(c1) ;
  s6.getAllCourses().add(c1) ;
  // 第二门课程有六个学生参加
  c2.getAllStudents().add(s1) ;
  c2.getAllStudents().add(s2) ;
  c2.getAllStudents().add(s3) ;
  c2.getAllStudents().add(s4) ;
  c2.getAllStudents().add(s5) ;
  c2.getAllStudents().add(s6) ;
  s1.getAllCourses().add(c2) ;
  s2.getAllCourses().add(c2) ;
  s3.getAllCourses().add(c2) ;
  s4.getAllCourses().add(c2) ;
  s5.getAllCourses().add(c2) ;
  s6.getAllCourses().add(c2) ;
  // 输出一门课程的信息,观察一门课程有多少个学生参加
  System.out.println(c1) ;  //输出第一门课程
  Iterator<Student> iter1 = c1.getAllStudents().iterator() ;  //利用iterator接口输出选c1这门课程的全部学生
  while(iter1.hasNext()){
   Student s = iter1.next() ;
   System.out.println(" |- " + s) ;
  }
  // 通过学生找到学生参加的课程
  System.out.println(s6) ;  //输出学生信息
  Iterator<Course> iter2 = s6.getAllCourses().iterator() ;  //利用iterator接口输出s6这位学生所选的全部课程
  while(iter2.hasNext()){
   Course c = iter2.next() ;
   System.out.println(" |- " + c) ;
  }
 }
};

原文地址:https://www.cnblogs.com/6502ck/p/3386418.html