我們知道面向對象語言的三大特征是封裝、繼承、多態。我們在定義了一個類之后,可以通過再定義一個類,且這個類繼承上一個類來擴展其功能。其實,在我們定義類時,類中的成員變量除了基本數據類型也可以是引用數據類型。下面我將編寫一個有關類成員變量中引用數據類型使用的例子。
在這個程序中,首先定義一個學校類,再定義一個班級類,最后定義一個學生類。在主程序中通過設置不同類型對象間的關系,達到類與類之間包含的關系。
代碼如下:
//學校類
package com.TinySK;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class School{
private String name;
//一個學校有多個班級 ,通過集合類List 實現。
private List<Cls> allClss;
public School(String name){
this.setName(name);
this.setAllClss(new ArrayList<Cls>());
}
//向學校中加入班級
public void add(Cls cls){
this.allClss.add(cls);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAllClss(List<Cls> allClss){
this.allClss = allClss;
}
public List<Cls> getAllClss(){
return this.allClss;
}
}
//班級類
class Cls{
private String name;
private School school; //此處定義了一個學校類的對象。
private List<Student> allStudents;//一個班級有多個學生 ,通過集合類List 實現。
public Cls(String name){
this.setName(name);
this.setAllStudents(new ArrayList<Student>());
}
//向班級中加入學生
public void add(Student stu){
this.allStudents.add(stu);
}
public List<Student> getAllStudents(){
return this.allStudents;
}
public void setAllStudents(List<Student> allStudents){
this.allStudents = allStudents;
}
public void setSchool(School school){
this.school = school;
}
public School getSchool(){
return this.school;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
//學生類
class Student{
private String name;
private int age;
//一個學生屬于一個班級
private Cls cls;
public Student(String name,int age){
this.setName(name);
this.setAge(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 setCls(Cls cls){
this.cls = cls;
}
public Cls getCls(){
return this.cls;
}
}
//主函數
public class Test{
public static void main(String[] args){
School sch = new School("Java blog");
Cls c1 = new Cls("Java一班");
Cls c2 = new Cls("Java二班");
Cls c3 = new Cls("Java三班");
Student stu1 = new Student("Tiny",20);
Student stu2 = new Student("SK",25);
Student stu3 = new Student("sevn",23);
Student stu4 = new Student("puck",28);
Student stu5 = new Student("lion",35);
//設置關系
sch.add(c1);
c1.setSchool(sch);
sch.add(c2);
c2.setSchool(sch);
sch.add(c3);
c3.setSchool(sch);
c1.add(stu1);
stu1.setCls(c1);
c2.add(stu2);
stu2.setCls(c2);
c2.add(stu3);
stu3.setCls(c2);
c3.add(stu4);
stu4.setCls(c3);
c3.add(stu5);
stu5.setCls(c3);
//如果要輸出全部的內容,則要進行雙重循環
System.out.println("學校名稱:"+sch.getName());
Iterator<Cls> iter1 = sch.getAllClss().iterator();
while(iter1.hasNext()){
Cls c = iter1.next();
System.out.println("\t|- 班級名稱:"+c.getName());
//輸出一個班級中的全部學生
Iterator<Student> iter2 = c.getAllStudents().iterator();
while(iter2.hasNext()){
Student s = iter2.next();
System.out.println("\t\t|- 學生姓名:"+s.getName()+",學生年齡:"+s.getAge()+" --> "+s.getCls().getSchool().getName());
}
}
}
}
運行結果如圖:
本例并沒有什么太多的難點,只是想突出一下類與類之間的關系。本文到此結束,有很多不足之處望大家批評指正。