1. 程式人生 > 實用技巧 >第4章 類與物件

第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();
    int
add(){ 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);
    }
}