之前我们学习的面向对象(基础篇)中的一对一关系: 面向对象(基础篇)一对一关系 以下这两个范例是Java EE的基础
范例一:一对多关系
使用类集可以表示以下关系:一所学校可以有多名学生,一名学生属于一所学校;
package zz.onetoomanydemo;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
class Student{
private String name;
private int age;
private School school;
public Student(String name, int age){
this.setName(name);
this.setAge(age);
//this.name = name;
//this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setSchool(School school){
this.school = school;
}
public School getSchool(){
return this.school;
}
public String toString(){
return "学生姓名:" + this.getName() + "; 年龄:" + this.getAge();
}
}
class 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){
this.name = name;
}
public String getName(){
return this.name;
}
public List<Student> getAllStudents(){
// public Student getAllStudents(){
return allStudents;
}
public String toString(){
return "学校姓名:" + this.getName();
}
}
public class TestDemo01{
public static void main(String []args){
// 实例化学校 和 多名学生对象
School school = new School("清华大学");
Student s1 = new Student("张三", 18);
Student s2 = new Student("李四", 19);
Student s3 = new Student("王五", 20);
//List<Student> allStudents = new ArrayList<Student>();
// 在学校中加入学生
school.getAllStudents().add(s1);
school.getAllStudents().add(s2);
school.getAllStudents().add(s3);
// 一个学生属于一个学校
s1.setSchool(school);
s2.setSchool(school);
s3.setSchool(school);
// 输出学生全部信息,用什么你懂的
Iterator<Student> iter = school.getAllStudents().iterator();
System.out.println(school);
while (iter.hasNext()){
System.out.println("\t|-" + iter.next());
}
}
}
程序运行结果:
学校姓名:清华大学
|-学生姓名:张三; 年龄:18
|-学生姓名:李四; 年龄:19
|-学生姓名:王五; 年龄:20
范例二:多对多关系
一名学生可以选修多门课程,一门课程可以被多名学生选修。
package zz.manytomanydemo;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
// 学生可以选多门课程,一门课程可以被多名学生选择;典型的多对多关系
class Student{
private String name;
private int age;
private List<Course> allCourses;
public Student(){
this.allCourses = new ArrayList<Course>();
}
public Student(String name, int age){
this();
this.setName(name);
this.setAge(age);
//this.name = name;
//this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public List<Course> getAllCourses(){
return this.allCourses;
}
public String toString(){
return "学生姓名:" + this.getName() + "; 年龄:" + this.getAge();
}
}
class Course{
private String name;
private List<Student> allStudents;
public Course(){ // 无参构造
this.allStudents = new ArrayList<Student>(); // 实例化 List 集合
}
public Course(String name){ // 通过构造设置属性
this(); // 调用构造
this.setName(name); // 设置属性内容
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public List<Student> getAllStudents(){
// public Student getAllStudents(){
return allStudents;
}
public String toString(){
return "课程名称:" + this.getName();
}
}
// 现加入两门课程,6名学生信息,测试程序
public class TestDemo02{
public static void main(String []args){
// 实例化课程 和 学生信息
Student s1 = new Student("张三", 18);
Student s2 = new Student("李四", 19);
Student s3 = new Student("王五", 20);
Student s4 = new Student("赵六", 21);
Student s5 = new Student("孙七", 22);
Student s6 = new Student("钱八", 23);
Course c1 = new Course("《Java程序设计》");
Course c2 = new Course("《Android手机开发》");
//《Java开发》有3人参加,向该课程中增加这3个学生信息,同时向学生中增加该课程信息
s1.getAllCourses().add(c1);
s2.getAllCourses().add(c1);
s3.getAllCourses().add(c1);
c1.getAllStudents().add(s1);
c1.getAllStudents().add(s2);
c1.getAllStudents().add(s3);
//《Android手机开发》全部学生参加,向该课程中增加全部学生信息,同时向学生中增加该课程信息
s1.getAllCourses().add(c2);
s2.getAllCourses().add(c2);
s3.getAllCourses().add(c2);
s4.getAllCourses().add(c2);
s5.getAllCourses().add(c2);
s6.getAllCourses().add(c2);
c2.getAllStudents().add(s1);
c2.getAllStudents().add(s2);
c2.getAllStudents().add(s3);
c2.getAllStudents().add(s4);
c2.getAllStudents().add(s5);
c2.getAllStudents().add(s6);
// 输出张三参加课程的信息,观察有多少课程,用什么你懂的
System.out.println(s1);
Iterator<Course> iter1 = s1.getAllCourses().iterator();
while (iter1.hasNext()){
System.out.println("\t|-" + iter1.next());
}
// 输出《Java开发》课程参加的学生,观察有多少学生,用什么你懂的
System.out.println(c1);
Iterator<Student> iter2 = c1.getAllStudents().iterator();
while (iter2.hasNext()){
System.out.println("\t|-" + iter2.next());
}
}
}
程序运行结果:
学生姓名:张三; 年龄:18
|-课程名称:《Java程序设计》
|-课程名称:《Android手机开发》
课程名称:《Java程序设计》
|-学生姓名:张三; 年龄:18
|-学生姓名:李四; 年龄:19
|-学生姓名:王五; 年龄:20
从以上程序中可以得出结论:
可以通过课程对象中的集合找到参加此课程的全部学生信息,也可以通过学生对象找到全部的课程信息。