1. 程式人生 > >Java基礎——面向物件程式設計(過載、重寫、封裝)

Java基礎——面向物件程式設計(過載、重寫、封裝)

Java基礎——面向物件程式設計(過載、重寫)

Java基礎知識圖解

Java基礎知識圖解

重寫與過載

重寫:

引數與返回值相同,許可權不能小於所覆蓋的方法,丟擲的異常不能大於多於所覆蓋的方法。

過載

方法名相同,引數不同(數量、型別、順序),與訪問許可權修飾符返回型別無關也就是可以不同。

可變個數形參

格式:對於方法的形參: 資料型別 … 形參名
可變個數的形參的方法與同名的方法之間構成過載
可變個數的形參在呼叫時,個數從0開始,到無窮多個都可以。
使用可變多個形參的方法與方法的形參使用陣列是一致的。
若方法中存在可變個數的形參,那麼一定要宣告在方法形參的最後。
在一個方法中,最多宣告一個可變個數的形參。

    //可變個數的形參的方法,與陣列不是過載他們是一樣的,重名後編譯器報錯
    public void sayHello(String... args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i] + "$");
        }
    }
	
    public void sayHello1(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
	

方法的引數傳遞(重點、難點)

形參:方法宣告時,方法小括號內的引數
實參:呼叫方法時,實際傳入的引數的值

規則:java中的引數傳遞機制:值傳遞機制

  • 形參是基本資料型別的:將實參的值傳遞給形參的基本資料型別的變數
  • 形參是引用資料型別的:將實參的引用型別變數的值(對應的堆空間的物件實體的首地址值)傳遞給形參的引用型別變數。
 public static void main(String[] args) {
        int i = 10;
        int j = 5;
        System.out.println("i:" + i + " j:" + j);//i : 10  j : 5
        //交換變數i與j的值
        int temp = i;
        i = j;
        j = temp;
        System.out.println("i:" + i + " j:" + j);//i : 5  j : 10
    }

在這裡插入圖片描述

public class TestArgsTransfer {
    public static void main(String[] args) {
        TestArgsTransfer tt = new TestArgsTransfer();
        int i = 10;
        int j = 5;
        System.out.println("i:" + i + " j:" + j);//i : 10  j : 5

//		//交換變數i與j的值
//		int temp = i;
//		i = j;
//		j = temp;
        tt.swap(i, j);//將i的值傳遞給m,j的值傳遞給n

        System.out.println("i:" + i + " j:" + j);//i : 10  j : 5
    }

    //定義一個方法,交換兩個變數的值
    public void swap(int m, int n) {
        int temp = m;
        m = n;
        n = temp;
        System.out.println("m:" + m + " n:" + n);
    }
}

在這裡插入圖片描述

public class TestArgsTransfer1 {
        public static void main(String[] args) {
            TestArgsTransfer1 tt = new TestArgsTransfer1();
            DataSwap ds = new DataSwap();
            System.out.println("ds.i:" + ds.i + " ds.j:" + ds.j);

            tt.swap(ds);
            System.out.println(ds);

            System.out.println("ds.i:" + ds.i + " ds.j:" + ds.j);

        }

        //交換元素的值
        public void swap(DataSwap d) {
            int temp = d.i;
            d.i = d.j;
            d.j = temp;
            System.out.println(d);//列印引用變數d的值
        }
    }

    class DataSwap {
        int i = 10;
        int j = 5;
    }

在這裡插入圖片描述

封裝

目的:為了維護程式安全穩定性,保護底層資料;

行為:一切為了維護程式的安全穩定性,保護底層資料的行為,都稱之為封裝。

具體體現:

  • 私有屬性,公有方法
  • 私有構造,靜態方法返回類物件
  • 內部類:並列內部類包含內部類

訪問許可權修飾符

在這裡插入圖片描述
注意:

  • 對於class的許可權修飾只可以用public和default(預設)。
  • public類可以在任意地方被訪問。
  • default類只可以被同一個包內部的類訪問。

構造方法

構造器的作用:

  • 建立物件
String str = new String("構造方法為屬性賦值")
  • 給建立的物件的屬性賦值
public Student() {
        name = "為name賦值";
    }

構造器的機制:

  • 設計類時,若不顯式宣告類的構造器的話,程式會預設提供一個空參的構造器. 一旦顯式的定義類的構造器,那麼預設的構造器就不再提供。
  • 如何宣告類的構造器。格式:許可權修飾符 類名(形參){ }
  • 類的多個構造器之間構成過載

類物件的屬性賦值的先後順序:

  1. 屬性的預設初始化 private String name;
  2. 屬性的顯式初始化 private String name = “呵呵”;
  3. 通過構造器給屬性初始化
  4. 通過"物件.方法"的方式給屬性賦值

編譯器自動生成的構造方法

	public student (String name){
	    this.name = name;
	}

理解:this.name指的是student中的屬性name,然後將引數name賦值於屬性name.

日記

臨沂出差七日遊,我要走了,欠我一頓酒的兄弟,還有那位欠我飯的小姐姐。
前段時間在耳邊有人說臨沂很窮,我並沒有感覺到窮因為菏澤比臨沂更窮!你有沒有能力在你認為很窮的地方,憑藉自己的實力毫不費力買房買車並結婚生子贍養父母嗎,如果沒有你不覺得可笑嗎?

2018-11-04 你堅持鞏固的第五天