12. 定义类 【连载 12】
Java 是面向?qū)ο蟮木幊陶Z言,我們可以使用 Java 來模擬現(xiàn)實(shí)世界的任何事物,其中 類 有非常重要的作用。在【面向?qū)ο蟮某醪嚼斫狻恐幸呀?jīng)做過其基本的講解,這次內(nèi)容,主要來告訴你如何在 Java 中定義類。
成員變量
現(xiàn)在使用 Java 語言來模擬汽車,其屬性,其行為。汽車對應(yīng)到 Java 世界中是一個類:
public class Car {}汽車的制造商、里程表、最高時速我們可以用類的成員變量來表示:
public class Car {String make;//制造商double odometer;//里程int maxSpeed;//最高時速 }在一個類中,除了基本類型變量之外,還可以使用引用類型變量,作為成員變量。比如給汽車增加一個引擎的屬性。
定義引擎:
public class Engine {double power = 5.5;//動力 }Car 增加引擎屬性:
public class Car {String make;//制造商double odometer;//里程int maxSpeed;//最高時速Engine engine;//引擎 }成員方法
汽車除了有其屬性之外,當(dāng)然還有它自己的行為,在類中用方法來模擬汽車的行為。汽車啟動、汽車行駛用兩個成員方法來表示:
public class Car {String make;//制造商double odometer;//里程int maxSpeed;//最高時速Engine engine;//引擎//汽車啟動public void starup() {System.out.println(make + ", 啟動了");}//汽車行駛public void run() {System.out.println("80, 行駛");}}構(gòu)造方法
在一個類中還有一種重要的方法,就是構(gòu)造方法,被稱為構(gòu)造器,它的作用是用來創(chuàng)建對象的。當(dāng)我們使用一個類去創(chuàng)建一個對象的時候,會調(diào)用其相應(yīng)的構(gòu)造方法,來創(chuàng)建一個對象實(shí)例。構(gòu)造方法有自己的一些規(guī)則,有別于普通的成員方法。
構(gòu)造方法需要滿足以下條件:
給汽車類增加構(gòu)造函數(shù):
public class Car {String make;//制造商double odometer;//里程int maxSpeed;//最高時速Engine engine;//引擎//空構(gòu)造,也是默認(rèn)構(gòu)造。public Car() {System.out.println("調(diào)用了空構(gòu)造方法");}//汽車啟動public void starup() {System.out.println(make + ", 啟動了");}//汽車行駛public void run() {System.out.println("80, 行駛");}}定義了一個空的構(gòu)造,方法中沒有任何的代碼邏輯。這也是一個類的默認(rèn)構(gòu)造方法。意思是說:如果一個類沒有像上面顯示的什么任何構(gòu)造方法的時候,當(dāng)我們創(chuàng)建對象的時候,會自動調(diào)用一個空的構(gòu)造方法。
public static void main(String[] args) {Car myCar = new Car(); }- Car myCar:聲明了一個Car類型的變量。
- new : 一個創(chuàng)建對象的關(guān)鍵字。
- Car() :調(diào)用構(gòu)造方法
除了空構(gòu)造方法之外,可以自一個類中定義多個構(gòu)造方法,但是這些個構(gòu)造方法之間參數(shù)不能一樣。我們再定義兩個構(gòu)造方法:
public class Car {String make;//制造商double odometer;//里程int maxSpeed;//最高時速Engine engine;//引擎//空構(gòu)造,也是默認(rèn)構(gòu)造。public Car() {System.out.println("調(diào)用了空構(gòu)造方法");}//一個參數(shù)的構(gòu)造方法,可以傳遞make值,創(chuàng)建一個對象public Car(String make) {this.make = make;}//多個參數(shù)的構(gòu)造public Car(String make, double odometer, int maxSpeed, Engine engine) {this.make = make;this.odometer = odometer;this.maxSpeed = maxSpeed;this.engine = engine;} //汽車啟動public void starup() {System.out.println(make + ", 啟動了");}//汽車行駛public void run() {System.out.println("80, 行駛");}}使用不同的構(gòu)造方法來創(chuàng)建對象:
public static void main(String[] args) {Car myCar = new Car();Car poloCar = new Car("polo");Engine engine = new Engine();Car miniCar = new Car("mini", 50.5, 200, engine); }方法重載
汽車的類中,存在三個參數(shù)不一樣的構(gòu)造方法。這種情況其實(shí)是一種方法重載的現(xiàn)象。
方法重載:在一個類中方法名相同,方法的參數(shù)不一樣的現(xiàn)象叫做方法重載。
方法參數(shù)不一樣包括情況:
- 方法的參數(shù)的類型相同,個數(shù)不相同
- 方法的個數(shù)相同,類型不相同
原則是只要方法的參數(shù)不一樣,在調(diào)用的時候,能夠正確的區(qū)分是調(diào)用哪個方法,就 OK
構(gòu)造方法可以重載,當(dāng)然其他的成員方法也是可以重載的。比如 Car 中的run方法:
//汽車行駛public void run() {System.out.println("80, 行駛");}//指定某個速度行駛 public void run(int speed) {System.out.println("以"+ speed +"的速度行駛"); }兩個 run 方法的參數(shù)不一樣,構(gòu)成了方法重載。方法重載主要是為了適應(yīng)不同的場景。像你買一份涼皮,有人喜歡加辣,有人不要辣。
調(diào)用兩個方法:
public static void main(String[] args) {Car myCar = new Car();myCar.run();myCar.run(200); }現(xiàn)在已經(jīng)了解一個類的基本結(jié)構(gòu),我們可以根據(jù)實(shí)際的情況去定義其屬性和方法。下面要介紹的是變量和方法的可見性。
可見性
所謂可見性,就是說針對一個變量和方法,誰可以方法調(diào)用。主要的針對兩類情況,類的內(nèi)部和類的外部。
控制變量和方法可見性的是修飾詞:
- private 私有的,不公開。修飾的變量和方法只有在其類的內(nèi)部 可以被調(diào)用,對類的外部不可見。
- protected 保護(hù)的,有權(quán)限的公開。修飾的變量和方法只有同一個包下的其他類可以調(diào)用,對其他的類不可見。變量和方法沒有任何修飾詞的時候,默認(rèn)效果和 protected 修飾一樣。
- public 完全公共的,修飾的變量和方法對其他的類完全公開,可以被訪問和調(diào)用。
對于變量,如果使用 private 修飾的話,起到一個保護(hù)作用,這種做法叫封裝。只有通過調(diào)用其對應(yīng)對象的公開的方法才可以訪問被封裝的變量屬性。
對于方法,一般都會使用 public 修飾,方法公開被調(diào)用。如果該方法只是本類的內(nèi)部使用,我們可以使用 private 修飾。
對于構(gòu)造方法,如果用private 修飾的話,在該類的外部將不能創(chuàng)建實(shí)例對象。這種做法可以用來實(shí)現(xiàn)單例模式,后面有內(nèi)容會講的。
OK,對于類的定義,我們基本用到的一些規(guī)則給你做了介紹。下次內(nèi)容著重來說一說類的使用。
轉(zhuǎn)載于:https://blog.51cto.com/lirenmi/2054157
總結(jié)
以上是生活随笔為你收集整理的12. 定义类 【连载 12】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: erlang四种启动监控策略
- 下一篇: 基于rman 全备+归档在线搭建DG