類(class)是既包括資料又包括作用於資料的一組操作的封裝體。
對象(object)是類的執行個體(instance)。
類具有封裝性、繼承性、多態性和抽象性。
1.對象的狀態:資料成員
public class MyDate{
int year;
int month;
int day;
}
2.對象的行為:方法
public static int daysOfMonth(int year,int month) //返回指定年月的天數,靜態方法{
switch(month) //計算每月的天數
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;
case 4:case 6:case 9:case 11:return 30;
case 2:return isLeapYear(year)?29:28;
default:return 0;
}
}
3.對象初始化:建構函式
public class MyDate
{
public MyDate(int y, int m, int d) //聲明構造方法
{ //構造方法與類同名,構造方法返回該類的一個執行個體
year = y;
month = m;
day = d;
}
}
4.封裝性
封裝對象中的欄位,可以用通過欄位定義的開頭使用private將他們聲明為私人。
public class MyDate
{
private int year,month,day; //執行個體成員變數
private static int thisYear; //靜態成員變數
static //靜態成員變數初始化
{
thisYear=2009;
}
public static int getThisYear() //靜態成員方法
{
return thisYear; //訪問靜態成員變數
}
}
5.繼承性
public class Student extends Person //Student是Person類的子類
{
private String speciality; //專業,子類增加的成員變數
public static void main(String args[])
{
Person p1 = new Person("李小明", new MyDate(1979,3,15));
Student s1 = new Student(); //預設構造方法,執行父類構造方法Person()
s1.howMany(); //通過對象也能調用類成員方法
System.out.println("p1:"+p1.toString()+",s1:"+s1.toString());
s1.set("王江", new MyDate(1987,9,1)); //s1對象調用父類的成員方法
System.out.println(s1+","+s1.getName()+"比"+p1.getName()+"大"+ s1.olderThen(p1)+"歲");
s1.finalize(); //繼承父類的析構方法
Person.howMany();
}
}
5.多態性
(1)子類隱藏父類成員變數(2)子類覆蓋父類成員方法
覆蓋(override)是指子類聲明並實現父類中的同名方法並且參數列表也完全相同。
(3)子類繼承並重載父類成員方法
重載(overload)是指同一個類中的多個方法可以同名但參數列表必須不同。
Person p=new Student();
Object obj = new Person();
public int olderThen(Person p)
p1.olderThen(s1)
s1.olderThen(p1)