一文搞懂Java的 構造方法 和 訪問權限


 本文原創首發CSDN,本文鏈接https://blog.csdn.net/qq_41464123/article/details/107461710 ,作者博客https://blog.csdn.net/qq_41464123 ,轉載請帶上本鏈接,謝謝配合。


 


目錄

零、前言

一、構造方法

1.1 簡易版類的實例化

1.2 使用構造方法實例化類

二、Java的訪問權限

2.1 public 公開

2.2 protected保護

2.3 系統默認

2.4 private私有保護

三、總結


零、前言

 

Java是一門當今最火的編程語言之一,擁有很多現成可用的庫,在我們編程生涯中,有着無比重要的地位。

Java中有個概念叫做訪問權限。它們是什么呢?今天我來詳細講解。

本文所有代碼已經上傳CSDN下載模塊,下載地址​​​​​​​,也可以在文章下方的評論區找我要,謝謝!


 

一、構造方法

 

1.1 簡易版類的實例化

 

在內部類中,會涉及到訪問權限的概念;而在訪問權限中,會涉及到構造方法的概念,所以我們先來學習什么是構造方法。

我們先來編寫一個最簡單的類 —— 人,並且不用Java的封裝。

public class People {

	String name;
	
	int age;
	
}

人有兩個屬性,分別是名字name和年齡age。

 接着編寫一個主函數,實例化這個類,並且輸出它的屬性。

public class Main {

	public static void main(String[] args) {
		
		People people = new People();
		people.name = "ZWZ";
		people.age = 18;
		System.out.println("姓名 = " + people.name + ", 年齡 = " + people.age);
	}

}

輸出結果如下圖所示:

很好,那么我們如果要實例化五個類呢?很簡單,我們寫五遍就好了

public class Main {

	public static void main(String[] args) {
		
		People people1 = new People();
		people1.name = "ZWZ01";
		people1.age = 18;
		
		People people2 = new People();
		people2.name = "ZWZ02";
		people2.age = 18;
		
		People people3 = new People();
		people3.name = "ZWZ03";
		people3.age = 18;
		
		People people4 = new People();
		people4.name = "ZWZ04";
		people4.age = 18;
		
		People people5 = new People();
		people5.name = "ZWZ05";
		people5.age = 18;
		
		System.out.println("姓名 = " + people1.name + ", 年齡 = " + people1.age);
		System.out.println("姓名 = " + people2.name + ", 年齡 = " + people2.age);
		System.out.println("姓名 = " + people3.name + ", 年齡 = " + people3.age);
		System.out.println("姓名 = " + people4.name + ", 年齡 = " + people4.age);
		System.out.println("姓名 = " + people5.name + ", 年齡 = " + people5.age);
	}

}

 

1.2 使用構造方法實例化類

 

那么聰明的你又沒有想過,能不能簡化對類的實例化操作呢?

當然可以!這就需要用到構造方法

我們現在People.java類中添加構造方法,構造函數訪問權限默認即可

public class People {

	String name;
	int age;
	
	People(String name,int age){
		this.name = name;
		this.age = age;
	}
}

這個時候,People類自帶的無參構造方法就失效了。


PS:當你沒有為類寫構造方法時,系統會默認給你安排一個無參的構造方法,當你自己寫了構造方法之后,系統自帶的就會消失。


接着我們在主函數實例化類的時候,傳入參數就可以了,代碼是不是簡單了很多?

public class Main {

	public static void main(String[] args) {
		
		People people1 = new People("ZWZ01",18);
		People people2 = new People("ZWZ01",18);
		People people3 = new People("ZWZ01",18);
		People people4 = new People("ZWZ01",18);
		People people5 = new People("ZWZ01",18);
		
		System.out.println("姓名 = " + people1.name + ", 年齡 = " + people1.age);
		System.out.println("姓名 = " + people2.name + ", 年齡 = " + people2.age);
		System.out.println("姓名 = " + people3.name + ", 年齡 = " + people3.age);
		System.out.println("姓名 = " + people4.name + ", 年齡 = " + people4.age);
		System.out.println("姓名 = " + people5.name + ", 年齡 = " + people5.age);
	}
}

這就是構造方法。

當然你也可以把輸出信息放在構造方法內部,那也完全可以,就像這樣:

public class People {

	String name;
	int age;
	
	People(String name,int age){
		this.name = name;
		this.age = age;
		System.out.println("姓名 = " + this.name + ", 年齡 = " + this.age);
	}
}

主函數就直接做實例化操作即可。

public class Main {

	public static void main(String[] args) {
		
		People people1 = new People("ZWZ01",18);
		People people2 = new People("ZWZ01",18);
		People people3 = new People("ZWZ01",18);
		People people4 = new People("ZWZ01",18);
		People people5 = new People("ZWZ01",18);
	}
}

總結起來一句話!構造方法就是在我們實例化類的時候,給類的指定變量賦值、執行指定方法。

 


本文原創首發CSDN,本文鏈接https://blog.csdn.net/qq_41464123/article/details/107461710 ,作者博客https://blog.csdn.net/qq_41464123 ,轉載請帶上本鏈接,謝謝配合。


 

二、Java的訪問權限

 

在講內部類之前,必須要理解Java的訪問權限。

Java語言采用訪問控制修飾符,來控制類、成員方法、成員變量的訪問權限,共分為以下四個級別:

(1)public 公開,對外部訪問不做限制。

(2)protected保護,只對子類和同一個包下的類公開。

(3)默認級保護,不加修飾符,只對同一個包下的類公開。

(4)private私有保護,只有自己才能訪問,不對外公開。

其中:以上訪問級別只適用於類和類的成員,不適用於局部變量。

成員變量、成員方法、構造方法都可以使用上面的四種訪問級別。

先把結論寫出來,后面一一證明。

 

Java四種訪問權限的范圍
  private 默認 protected public
同一類的成員
同一個包的其他類(包括子類) ×
不同包的子類 × ×
不同包的非子類 × × ×

 

在第一塊已經講解了Java的構造方法,我們就以構造方法為例,講解Java的訪問權限

 

2.1 public 公開

首先是public 公開,我們將People類的構造方法的訪問權限定義為public

public class People {

	String name;
	int age;
	
	public People(String name,int age){
		this.name = name;
		this.age = age;
		System.out.println("姓名 = " + this.name + ", 年齡 = " + this.age);
	}
}

用自己包下的測試函數,跑一波

public class Main {

	public static void main(String[] args) {
		People people = new People("ZWZ01",18);
	}
}

發現沒毛病,可以正常實例化People類。

總結:使用public修飾訪問權限,所有類都可以訪問到此構造方法。

 


2.2 protected保護

我們在cn.ypc(下面簡稱A包)的People的構造方法,改成 protected 類型

package cn.ypc;

public class People {

	String name;
	int age;
	
	protected People(String name,int age){
		this.name = name;
		this.age = age;
		System.out.println("姓名 = " + this.name + ", 年齡 = " + this.age);
	}
}

測試A包下的主函數

package cn.ypc;

public class Main {

	public static void main(String[] args) {
		People people = new People("ZWZ01",18);
	}
}

發現可以正常實例化

接着測試cn.yy包(以下簡稱B包)下的測試函數

IDE報錯了,以我的英語水平都能看出來,按照中文式翻譯方法

The    constructor   People(String, int)   is   not    visible

這個    結構體(類)     People(String, int)            可見的

聰明的讀者明白了吧?B包的測試函數無法讀取A包People的構造方法。


同理,如果是People的子類,能不能訪問到 protected權限的構造方法呢?

我們在A包下,創建一個Student學生類,繼承自People父類。代碼如下所示

package cn.ypc;

public class Student extends People{

	protected Student(String name, int age) {
		super(name, age);
	}
}

接着在A包的測試類中,進行對Student學生類的實例化。

package cn.ypc;

public class Main {

	public static void main(String[] args) {
		Student student = new Student("ZWZ01",18);
	}
}

可以正常輸出!

 

總結:只對子類,或者同一包下的類公開構造方法。(注意子類並不一定在一個包下)

 


2.3 系統默認

現在People類創建在A包下,我們在B包下創建一個People的子類——Student類。

翻譯一下,就是 People 類沒有默認的構造方法,必須要自己定義一個構造方法

當我們自動填寫父類的構造方法的時候,IDE又報錯了,類似之前的錯誤,也是構造方法找不到的問題。

所以,可以得出結論:在系統默認的訪問權限下,對同一個包公開,對不同包不公開。

 

總結:系統默認情況下,只對同一包下的類公開構造方法。

系統默認與protected不同的是,如果其子類不在同一包下,那么這個子類就不能訪問父類的構造方法。


 

2.4 private私有保護

如果我們把A包的People類構造方法改為private私有

package cn.ypc;

public class People {

	String name;
	int age;
	
	private People(String name,int age){
		this.name = name;
		this.age = age;
		System.out.println("姓名 = " + this.name + ", 年齡 = " + this.age);
	}
}

看!首先是本包下的子類引用父類的構造方法,就報錯了,說是找不到構造方法

接着是本包下的測試類調用People的構造方法,也不行!

 

 那么如果是別的包下的測試類,那也一樣找不到構造方法

 

總結:如果被private修飾,那么這個構造方法只能被自己所用,不能被其他類所調用。


 

三、總結

 

1.構造方法:就是在我們實例化類的時候,給類的指定變量賦值、執行指定方法。

2.public:使用public修飾訪問權限,所有類都可以訪問到此構造方法。

3.protected:只對子類,或者同一包下的類公開構造方法。(注意子類並不一定在一個包下)

4.系統默認:與protected不同的是,如果其子類不在同一包下,那么這個子類就不能訪問父類的構造方法。

5.private:如果被private修飾,那么這個構造方法只能被自己所用,不能被其他類所調用。

 

Java的成員變量、成員方法、構造方法的訪問級別可以是上面的任意一個,一般使用 public (公開)private (私有)會比較多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM