我們知道面向對象語言的三大特征是封裝、繼承、多態。我們在定義了一個類之后,可以通過再定義一個類,且這個類繼承上一個類來擴展其功能。其實,在我們定義類時,類中的成員變量除了基本數據類型也可以是引用數據類型。下面我將編寫一個有關類成員變量中引用數據類型使用的例子。

在這個程序中,首先定義一個學校類,再定義一個班級類,最后定義一個學生類。在主程序中通過設置不同類型對象間的關系,達到類與類之間包含的關系。

代碼如下:

//學校類

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());   
                        }   
                }   
        }   
}

運行結果如圖:_OM38[@O$QC@2{VTXN`E9A1

本例并沒有什么太多的難點,只是想突出一下類與類之間的關系。本文到此結束,有很多不足之處望大家批評指正。