第4章 類與物件
一.類與物件的概念
1.抽象原則:捨棄研究物件個別非本質的特徵,抽取共同本質的特徵
目前主要強調過程抽象(動態成員方法)和資料抽象(描述資料資料成員)
屬性:一組資料描述物件特徵
2.描述一個類需要三個方面:
類標識:非重複類名
屬性說明:描述靜態特徵
方法說明:描述動態特徵
class Rectangle{ //類的屬性:靜態特徵 int length; int width; //類的方法:動態特徵 int area(int l,int w){ int length=l; int width=w; return(length*width); } }
3.類與物件的關係
物件是類的一個例項,類是一個獨立的程式單位,是物件的模板
定義物件前先定義類,在定義了類之後才可以定義物件
二。封裝機制
1.在類的定義中設定訪問物件屬性及方法的許可權,限制本類物件及其他類的物件使用的範圍
提供一個介面來描述其他物件的使用方法
其他物件不能直接修改本物件所擁有的屬性和方法
class 類名 { 資料成員 成員方法 }
更為嚴謹的定義
[類修飾符] class 類名 [extends 父類名] [implements 介面列表] { 資料成員 成員方法 }
如果一個類前沒有修飾符,則這個類只能被同一個包裡的類使用。Java規定同一個程式中的所有類都在同一個包中。無修飾符的類可以被同一個程式檔案中的類使用,但不能被其他程式檔案中的類使用
Final類不能被繼承
obstract是抽象類
class Pp1{ int a=45; } public class C4_4 { public static void main(String[] args){ Pp1 p1=new Pp1(); System.out.println(p1.a); } }
2.public修飾符
在一個程式檔案中,只能定義一個public類,其餘的類可以是無修飾符的類,也可以使用final修飾符定義的最終類
class Pp{ C4_5 f1=new C4_5(); intadd(){ return(f1.b+f1.c); } } public class C4_5 { int b=20,c=3; public static void main(String[] args){ Pp p1=new Pp(); System.out.println(p1.add()); } }
3.final修飾符
最終類是不能被任何其它類所繼承
4.abstract修飾符
抽象類刻畫了研究物件的公有行為特徵,通過繼承機制將這些特徵傳送給他的派生類
當一個類中出現了一個或多個用abstract修飾符定義的方法時,必須在這個類前面加上abstract修飾符,將其定義為抽象類
可以同時使用兩個修飾符來修飾一個類
一個類可以被修飾為public abstract,也可以被修飾為public final,但不能被修飾為abstract final
三.資料成員
1.命名
開頭:字母,$,下劃線,開頭不能用數字
訪問許可權修飾符:public private protected
非訪問許可權修飾符:static final
2.用static修飾的靜態資料成員不屬於任何一個類的具體物件,而是屬於類的靜態資料成員
他被儲存在類的記憶體區的公共儲存單元中,而不是某個物件的記憶體區,因此任何物件訪問它時,存取到的都是相同的數值
可以通過類名加點操作符訪問它
3.靜態資料成員的初始化
靜態初始化器用於對類的靜態資料成員進行初始化,而構造方法用來對新建立的物件進行初始化
靜態初始化器不是方法,沒有方法名、返回值和引數表
靜態初始化器是在他所屬的類載入到記憶體時由系統呼叫執行的,而構造方法是系統用new運算子產生新物件時自動執行的
4.final修飾的最終資料成員
一個類的資料成員用final修飾符修飾,則這個資料成員就被限定為最終資料成員,最終資料成員可以在生命時進行初始化,也可以通過構造方法賦值,但不能在程式的其他部分賦值,它的值在程式的整個執行過程中不能改變
5.區域性變數使用方法
public class C4_10 { public static void main(String[] args){ int a=2,b=3; int f=add(a,b); System.out.println("f="+f); } static int add(int x,int y){ int z,d; z=x+y; return z; } }
7.形式引數與實際引數
實參可以是表示式
實參變數對形參變數的資料傳遞時值傳遞,只能由實參傳給形參,而不能相反
public class C4_12 { static void add(double x,double y){ double z; z=x+y; System.out.println("z="+z); x=x+3.2; y=y+1.2; System.out.println("x="+x+"\ty="+y); } static double add1(double y1,double y2){ double z; z=y1+y2+2.9; return z; } public static void main(String[] args){ int a=2,b=7; double f1=2,f2=4,f3; add(a,b); System.out.println("a="+a+"\tb="+b); f3=2+add1(f1,f2); System.out.println("f1="+f1+"\tf2="+f2+"\tf3="+f3); } }