国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

建設(shè)廳官方網(wǎng)站企業(yè)庫(kù)網(wǎng)絡(luò)賺錢(qián)推廣

建設(shè)廳官方網(wǎng)站企業(yè)庫(kù),網(wǎng)絡(luò)賺錢(qián)推廣,做系統(tǒng)前怎么保存網(wǎng)站上的收藏,打造網(wǎng)站品牌該系列博文會(huì)告訴你如何從入門(mén)到進(jìn)階,一步步地學(xué)習(xí)Java基礎(chǔ)知識(shí),并上手進(jìn)行實(shí)戰(zhàn),接著了解每個(gè)Java知識(shí)點(diǎn)背后的實(shí)現(xiàn)原理,更完整地了解整個(gè)Java技術(shù)體系,形成自己的知識(shí)框架。 概述: Java是面向?qū)ο蟮某绦颉?article class="baidu_pl">

該系列博文會(huì)告訴你如何從入門(mén)到進(jìn)階,一步步地學(xué)習(xí)Java基礎(chǔ)知識(shí),并上手進(jìn)行實(shí)戰(zhàn),接著了解每個(gè)Java知識(shí)點(diǎn)背后的實(shí)現(xiàn)原理,更完整地了解整個(gè)Java技術(shù)體系,形成自己的知識(shí)框架。

概述:

Java是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,Java語(yǔ)言提供了定義類(lèi)、成員變量、方法等最基本的功能。類(lèi)可被認(rèn)為是一種自定義的數(shù)據(jù)類(lèi)型,可以使用類(lèi)來(lái)定義變量,所有使用類(lèi)定義的變量都是引用變量,它們將會(huì)引用到類(lèi)的對(duì)象。類(lèi)用于描述客觀世界里某一類(lèi)對(duì)象的共同特征,而對(duì)象則是類(lèi)的具體存在,Java程序使用類(lèi)的構(gòu)造器來(lái)創(chuàng)建該類(lèi)的對(duì)象。

對(duì)象和類(lèi):

Java是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,類(lèi)是面向?qū)ο蟮闹匾獌?nèi)容,可以把類(lèi)當(dāng)成一種自定義類(lèi)型,可以使用類(lèi)來(lái)定義變量,這種類(lèi)型的變量統(tǒng)稱為引用變量。也就是說(shuō),所有類(lèi)是引用類(lèi)型。對(duì)象是由類(lèi)創(chuàng)建出來(lái)的,可以說(shuō)類(lèi)時(shí)對(duì)象的抽象,對(duì)象是類(lèi)的實(shí)例。

對(duì)象的概念:

Java 是面向?qū)ο蟮木幊陶Z(yǔ)言,對(duì)象就是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心。所謂對(duì)象就是真實(shí)世界中的實(shí)體,對(duì)象與實(shí)體是一一對(duì)應(yīng)的,也就是說(shuō)現(xiàn)實(shí)世界中每一個(gè)實(shí)體都是一個(gè)對(duì)象,它是一種具體的概念。對(duì)象有以下特點(diǎn):

  • 對(duì)象具有屬性和行為。
  • 對(duì)象具有變化的狀態(tài)。
  • 對(duì)象具有唯一性。
  • 對(duì)象都是某個(gè)類(lèi)別的實(shí)例。
  • 一切皆為對(duì)象,真實(shí)世界中的所有事物都可以視為對(duì)象。

面向?qū)ο笈c面向過(guò)程:

1、面向過(guò)程:

面向過(guò)程是一種以事件為中心的編程思想,編程的時(shí)候把解決問(wèn)題的步驟分析出來(lái),然后用函數(shù)把這些步驟實(shí)現(xiàn),在一步一步的具體步驟中再按順序調(diào)用函數(shù)。

我們以五子棋為例來(lái)解釋一下面向過(guò)程是如何解決問(wèn)題的:

下過(guò)五子棋的同學(xué)都知道,首先要找兩個(gè)人,然后把棋譜擺放好,其中一方手持黑棋,另一方手持白旗,一般約定白棋先動(dòng),然后黑棋在動(dòng),這樣每人一步,直到某一方先湊成五子一條線便為贏。這是我們平常下五子棋的過(guò)程,那么用面向過(guò)程該如何表示呢?

我們可以將下五子棋的過(guò)程抽象成如下步驟:

(1)開(kāi)始游戲(2)黑子先走(3)繪制畫(huà)面(4)判斷輸贏(5)輪到白子(6)繪制畫(huà)面(7)判斷輸贏(8)返回步驟(2) (9)輸出最后結(jié)果。

接著我們用面向過(guò)程來(lái)實(shí)現(xiàn)五子棋這一程序:

下五子棋{開(kāi)始游戲();黑子先走();繪制畫(huà)面();判斷輸贏();輪到白子();繪制畫(huà)面();判斷輸贏();返回到 黑子先走();輸出最后結(jié)果;}

復(fù)制

可見(jiàn),面向過(guò)程始終關(guān)注的是怎么一步一步地判斷棋局輸贏的,通過(guò)控制代碼,從而實(shí)現(xiàn)函數(shù)的順序執(zhí)行。

2、面向?qū)ο?#xff1a;

? 一種基于面向過(guò)程的新編程思想,顧名思義就是該思想是站在對(duì)象的角度思考問(wèn)題,我們把多個(gè)功能合理放到不同對(duì)象里,強(qiáng)調(diào)的是具備某些功能的對(duì)象。

具備某種功能的實(shí)體,稱為對(duì)象。面向?qū)ο笞钚〉某绦騿卧?#xff1a;類(lèi)。面向?qū)ο蟾臃铣R?guī)的思維方式,穩(wěn)定性好,可重用性強(qiáng),易于開(kāi)發(fā)大型軟件產(chǎn)品,有良好的可維護(hù)性。

Java編程思想一書(shū)中有一段對(duì)面向?qū)ο蟮目偨Y(jié)非常清晰到位,可謂是面向?qū)ο蟮木A所在:

1、萬(wàn)物皆對(duì)象 2、程序時(shí)對(duì)象的集合,它們通過(guò)發(fā)送消息來(lái)告知彼此所需要做的 3、每個(gè)對(duì)象都有自己的由其他對(duì)象所構(gòu)成的存儲(chǔ) 4、每個(gè)對(duì)象都擁有其類(lèi)型 5、某一特定類(lèi)型的所有對(duì)象都可以接收同樣的消息

3、兩者優(yōu)缺點(diǎn)比較:

(1)、面向過(guò)程:

優(yōu)點(diǎn):

  流程化使得編程任務(wù)明確,在開(kāi)發(fā)之前基本考慮了實(shí)現(xiàn)方式和最終結(jié)果,具體步驟清楚,便于節(jié)點(diǎn)分析。

  效率高,面向過(guò)程強(qiáng)調(diào)代碼的短小精悍,善于結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)開(kāi)發(fā)高效率的程序。

缺點(diǎn):

  需要深入的思考,耗費(fèi)精力,代碼重用性低,擴(kuò)展能力差,后期維護(hù)難度比較大。

(2)、面向?qū)ο?#xff1a;

優(yōu)點(diǎn):

  結(jié)構(gòu)清晰,程序是模塊化和結(jié)構(gòu)化,更加符合人類(lèi)的思維方式;

  易擴(kuò)展,代碼重用率高,可繼承,可覆蓋,可以設(shè)計(jì)出低耦合的系統(tǒng);

  易維護(hù),系統(tǒng)低耦合的特點(diǎn)有利于減少程序的后期維護(hù)工作量。

缺點(diǎn):

  開(kāi)銷(xiāo)大,當(dāng)要修改對(duì)象內(nèi)部時(shí),對(duì)象的屬性不允許外部直接存取,所以要增加許多沒(méi)有其他意義、只負(fù)責(zé)讀或?qū)懙男袨椤_@會(huì)為編程工作增加負(fù)擔(dān),增加運(yùn)行開(kāi)銷(xiāo),并且使程序顯得臃腫。

  性能低,由于面向更高的邏輯抽象層,使得面向?qū)ο笤趯?shí)現(xiàn)的時(shí)候,不得不做出性能上面的犧牲,計(jì)算時(shí)間和空間存儲(chǔ)大小都開(kāi)銷(xiāo)很大。

面向?qū)ο蟮娜筇匦?#xff1a;

概述:

1、繼承:

  繼承是面向?qū)ο蟮娜筇卣髦?#xff0c;也是實(shí)現(xiàn)軟件復(fù)用的重要手段。Java的繼承具有單繼承的特點(diǎn),每個(gè)子類(lèi)只有一個(gè)直接父類(lèi)。

2、封裝:

  封裝(Encapsulation)是面向?qū)ο蟮娜筇卣髦?#xff0c;它指的是將對(duì)象的狀態(tài)信息隱藏在對(duì)象內(nèi)部,不允許外部程序直接訪問(wèn)對(duì)象內(nèi)部信息,而是通過(guò)該類(lèi)所提供的方法來(lái)實(shí)現(xiàn)對(duì)內(nèi)部信息的操作和訪問(wèn)。

  封裝是面向?qū)ο缶幊陶Z(yǔ)言對(duì)客觀世界的模擬,在客觀世界里,對(duì)象的狀態(tài)信息都被隱藏在對(duì)象內(nèi)部,外界無(wú)法直接操作和修改。比如說(shuō)一個(gè)人的年齡,年齡只會(huì)隨著時(shí)間的流逝而逐漸增長(zhǎng),不能隨意修改人的年齡。對(duì)一個(gè)類(lèi)或?qū)ο髮?shí)現(xiàn)良好的封裝,可以實(shí)現(xiàn)以下目的。

3、多態(tài):

  Java引用變量有兩個(gè)類(lèi)型:一個(gè)是編譯時(shí)類(lèi)型,一個(gè)是運(yùn)行時(shí)類(lèi)型。編譯時(shí)類(lèi)型由聲明該變量時(shí)使用的類(lèi)型決定,運(yùn)行時(shí)類(lèi)型由實(shí)際賦給該變量的對(duì)象決定。如果編譯時(shí)類(lèi)型和運(yùn)行時(shí)類(lèi)型不一致,就可能出現(xiàn)所謂的多態(tài)(Polymorphism)。

  多態(tài)的作用是消除類(lèi)型之間的耦合關(guān)系。

詳解:

一、繼承:

1、繼承的概念:

程序來(lái)源于生活,也為生活所用。我們先從生活中的例子來(lái)看一下什么是繼承:

現(xiàn)在有一個(gè)農(nóng)場(chǎng)主,家有良田萬(wàn)頃,每年收入很多,他有一個(gè)兒子,就是我們口中的富二代。有一天農(nóng)場(chǎng)主不幸去世了,那么他手下的農(nóng)田和財(cái)產(chǎn)都是誰(shuí)的了,毫無(wú)疑問(wèn),當(dāng)然是他兒子的了(如果你好好努力,將來(lái)你兒子有很大機(jī)會(huì)是富二代哦)。那么他兒子本來(lái)一無(wú)所有,現(xiàn)在頃刻間多了需要Money,農(nóng)田,房子等等,也就是擁有了他父親的所有物資財(cái)富,這個(gè)我們就稱之為繼承。

Java的繼承通過(guò)extends關(guān)鍵字來(lái)實(shí)現(xiàn),實(shí)現(xiàn)繼承的類(lèi)被稱為子類(lèi),被繼承的類(lèi)被稱為父類(lèi),有的也稱其為基類(lèi)、超類(lèi)。父類(lèi)和子類(lèi)的關(guān)系,是一種一般和特殊的關(guān)系。例如水果和蘋(píng)果的關(guān)系,蘋(píng)果繼承了水果,蘋(píng)果是水果的子類(lèi),則蘋(píng)果是一種特殊的水果。

class Fruit{public double weight;public void info() {System.out.println("我是一個(gè)水果,重"+weight+"g");}
}public class Apple extends Fruit{public static void main(String[] args) {//創(chuàng)建Apple對(duì)象Apple apple=new Apple();//Apple對(duì)象本身并沒(méi)有weight成員變量//但是Apple的父類(lèi)用于weight變量,所以Apple也可以方位apple.weight=88;apple.info();}}結(jié)果:我是一個(gè)水果,重88.0g

復(fù)制

2、重寫(xiě)父類(lèi)的方法:

子類(lèi)擴(kuò)展了父類(lèi),子類(lèi)是一個(gè)特殊的父類(lèi)。大部分時(shí)候,子類(lèi)總是以父類(lèi)為基礎(chǔ),額外增加新的成員變量和方法。但有一種情況例外:子類(lèi)需要重寫(xiě)父類(lèi)的方法。例如鳥(niǎo)類(lèi)都包含了飛翔方法,其中鴕鳥(niǎo)是一種特殊的鳥(niǎo)類(lèi),因此鴕鳥(niǎo)應(yīng)該是鳥(niǎo)的子類(lèi),因此它也將從鳥(niǎo)類(lèi)獲得飛翔方法,但這個(gè)飛翔方法明顯不適合鴕鳥(niǎo),為此,鴕鳥(niǎo)需要重寫(xiě)鳥(niǎo)類(lèi)的方法。

//父類(lèi)
class Bird{public void fly() {System.out.println("我在天空自由的飛翔");}
}public class Ostrich extends Bird {//重寫(xiě)B(tài)ird的fly方法public void fly() {System.out.println("我只能在地上奔跑");}public static void main(String[] args) {//創(chuàng)建Ostrich對(duì)象Ostrich ostrich=new Ostrich();ostrich.fly();}
}結(jié)果:我只能在地上奔跑

復(fù)制

重寫(xiě)時(shí)需要注意:

1、返回值類(lèi)型

2、方法名

3、參數(shù)類(lèi)型及個(gè)數(shù)

都要與父類(lèi)繼承的方法相同,才叫方法的重寫(xiě)。

重寫(xiě)與重載的區(qū)別:

重寫(xiě):相對(duì)繼承而言,子類(lèi)中對(duì)父類(lèi)已經(jīng)存在的方法進(jìn)行區(qū)別化的修改。

重載:在同一個(gè)類(lèi)中處理不同數(shù)據(jù)的多個(gè)相同方法名的多態(tài)手段。重載方法名相同,參數(shù)列表不同。

3、繼承的初始化順序:

先思考一下下面代碼的輸出結(jié)果:

class Animal{public Animal() {System.out.println("我是父類(lèi)動(dòng)物");}
}class Humanity extends Animal{public Humanity() {System.out.println("我是父類(lèi)人類(lèi)");}
}public class Student extends Humanity{public Student() {System.out.println("我是子類(lèi)學(xué)生");}public static void main(String[] args) {Student student=new Student();}
}

復(fù)制

不要看結(jié)果,自己先思考一下

輸出結(jié)果:

結(jié)果

復(fù)制

是不是和你思考的結(jié)果一樣,不一樣的同學(xué)接著往下看:

Java中繼承初始化順序如下:

1、初始化父類(lèi)再初始化子類(lèi)

2、先執(zhí)行初始化對(duì)象中屬性,再執(zhí)行構(gòu)造方法中的初始化。

基于上面兩點(diǎn),我們就知道實(shí)例化一個(gè)子類(lèi),java程序的執(zhí)行順序是:

父類(lèi)對(duì)象屬性初始化---->父類(lèi)對(duì)象構(gòu)造方法---->子類(lèi)對(duì)象屬性初始化—>子類(lèi)對(duì)象構(gòu)造方法

下面放上一張形象的圖:

4、final關(guān)鍵字:

final 關(guān)鍵字可用于修飾類(lèi)、變量和方法,final關(guān)鍵字有點(diǎn)類(lèi)似C#里的sealed關(guān)鍵字,用于表示它修飾的類(lèi)、方法和變量不可改變。

final修飾變量時(shí),表示該變量一旦獲得了初始值就不可被改變,final既可以修飾成員變量(包括類(lèi)變量和實(shí)例變量),也可以修飾局部變量、形參。有的書(shū)上介紹說(shuō)final修飾的變量不能被賦值,這種說(shuō)法是錯(cuò)誤的!嚴(yán)格的說(shuō)法是,final修飾的變量不可被改變,一旦獲得了初始值,該final變量的值就不能被重新賦值。由于final變量獲得初始值之后不能被重新賦值,因此final修飾成員變量和修飾局部變量時(shí)有一定的不同。

1、final修飾變量:

  ☆:final修飾成員變量:一旦有了初始值,就不能被重新賦值。final修飾的成員變量必須由程序顯示的指定初始值。final修飾類(lèi)變量必須在靜態(tài)初始化塊中指定初始值或聲明該類(lèi)變量時(shí)指定初始值,而且只能在兩個(gè)地方其中之一指定;final修飾實(shí)例變量必須在非靜態(tài)初始化塊、聲明該實(shí)例變量或構(gòu)造器中指定初始值,而且只能在三個(gè)地方的其中之一指定。

  ☆:final修飾局部變量:系統(tǒng)不會(huì)對(duì)局部變量進(jìn)行初始化,局部變量必須由程序員顯式初始化。因此使用final修飾局部變量時(shí),既可以在定義時(shí)指定默認(rèn)值,也可以不指定默認(rèn)值。

  ☆:final修飾基本類(lèi)型變量與引用類(lèi)型變量區(qū)別:當(dāng)使用final修飾基本類(lèi)型變量時(shí),不能對(duì)基本類(lèi)型變量重新賦值,因此基本類(lèi)型變量不能被改變。但對(duì)于引用類(lèi)型變量而言,它保存的僅僅是一個(gè)引用,final只保證這個(gè)引用類(lèi)型變量所引用的地址不會(huì)改變,即一直引用同一個(gè)對(duì)象,但這個(gè)對(duì)象完全可以發(fā)生改變。

import java.util.Arrays;public class FinalTest {public static void main(String[] args) {//final修飾數(shù)組變量,arr只是一個(gè)引用變量final int[] arr= {3,90,33,12};System.out.println(Arrays.toString(arr));//對(duì)數(shù)組進(jìn)行排序,合法Arrays.sort(arr);System.out.println(Arrays.toString(arr));//對(duì)數(shù)組元素進(jìn)行賦值,合法arr[2]=109;System.out.println(Arrays.toString(arr));//下面語(yǔ)句對(duì)arr重新賦值,非法//arr=null;}}

復(fù)制

2、final修飾方法:

  final修飾的方法不可被重寫(xiě)

3、final修飾類(lèi):

  final修飾的類(lèi)不可以有之類(lèi)

5、this關(guān)鍵字:

this是自身的一個(gè)對(duì)象,代表對(duì)象本身,可以理解為:指向?qū)ο蟊旧淼囊粋€(gè)指針。

this的用法:

1、普通的直接引用

2、形參與成員名字重名,用this來(lái)區(qū)分

public class Student{String username;String password;public Student(String username,String password) {//this 代表當(dāng)前對(duì)象 也就是下面的studentthis.username=username;this.password=password;}public static void main(String[] args) {Student student=new Student("jack","123");}
}

復(fù)制

3、引用構(gòu)造函數(shù),這個(gè)放在super關(guān)鍵字中說(shuō)

6、super關(guān)鍵字:

super可以理解為是指向自己超(父)類(lèi)對(duì)象的一個(gè)指針,而這個(gè)超類(lèi)指的是離自己最近的一個(gè)父類(lèi)。

super的用法:

1、普通的直接引用:與this類(lèi)似,super相當(dāng)于是指向當(dāng)前對(duì)象的父類(lèi)

super.name:引用父類(lèi)的變量

super.add():引用父類(lèi)的方法

2、子類(lèi)中的成員變量或方法與父類(lèi)中的成員變量或方法同名:

class Humanity{public void eat() {System.out.println("動(dòng)物吃肉");}
}public class Student extends Humanity{public void eat() {//super調(diào)用父類(lèi)中的同名方法super.eat();System.out.println("人吃飯");}public static void main(String[] args) {Student student=new Student();student.eat();}
}

復(fù)制

結(jié)果:

動(dòng)物吃肉
人吃飯

復(fù)制

3、引用構(gòu)造函數(shù):

super(參數(shù)):調(diào)用父類(lèi)中的某一個(gè)構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)。

this(參數(shù)):調(diào)用本類(lèi)中另一種形式的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)。

class Humanity{public Humanity() {System.out.println("父類(lèi)無(wú)參構(gòu)造");}public Humanity(String s) {System.out.println("父類(lèi)有參構(gòu)造======"+s);}}public class Student extends Humanity{public Student() {super();//調(diào)用父類(lèi)的無(wú)參構(gòu)造方法System.out.println("子類(lèi)無(wú)參構(gòu)造");}public Student(String s) {super(s);//調(diào)用父類(lèi)的有參構(gòu)造System.out.println("子類(lèi)的有參構(gòu)造======"+s);}public Student(String username,String password) {this(username);//調(diào)用本類(lèi)的有參構(gòu)造System.out.println("子類(lèi)帶兩個(gè)參數(shù)的構(gòu)造函數(shù)======"+username+"======"+password);}public static void main(String[] args) {Student student=new Student();Student student2=new Student("小明");Student student3=new Student("小明","123");}}

復(fù)制

輸出結(jié)果:

父類(lèi)無(wú)參構(gòu)造
子類(lèi)無(wú)參構(gòu)造
父類(lèi)有參構(gòu)造======小明
子類(lèi)的有參構(gòu)造======小明
父類(lèi)有參構(gòu)造======小明
子類(lèi)的有參構(gòu)造======小明
子類(lèi)帶兩個(gè)參數(shù)的構(gòu)造函數(shù)======小明======123

復(fù)制

二、封裝:

1、封裝的概念與優(yōu)點(diǎn):

封裝(Encapsulation)是面向?qū)ο蟮娜筇卣髦?#xff0c;它指的是將對(duì)象的狀態(tài)信息隱藏在對(duì)象內(nèi)部,不允許外部程序直接訪問(wèn)對(duì)象內(nèi)部信息,而是通過(guò)該類(lèi)所提供的方法來(lái)實(shí)現(xiàn)對(duì)內(nèi)部信息的操作和訪問(wèn)。

封裝是面向?qū)ο缶幊陶Z(yǔ)言對(duì)客觀世界的模擬,在客觀世界里,對(duì)象的狀態(tài)信息都被隱藏在對(duì)象內(nèi)部,外界無(wú)法直接操作和修改。就如剛剛說(shuō)的Person對(duì)象的age變量,只能隨著歲月的流逝,age才會(huì)增加,通常不能隨意修改Person對(duì)象的age。對(duì)一個(gè)類(lèi)或?qū)ο髮?shí)現(xiàn)良好的封裝,可以實(shí)現(xiàn)以下目的。

  1. 隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)。
  2. 讓使用者只能通過(guò)事先預(yù)定的方法來(lái)訪問(wèn)數(shù)據(jù),從而可以在該方法里加入控制邏輯,限制對(duì)成員變量的不合理訪問(wèn)。
  3. 可進(jìn)行數(shù)據(jù)檢查,從而有利于保證對(duì)象信息的完整性。
  4. 便于修改,提高代碼的可維護(hù)性。

為了實(shí)現(xiàn)良好的封裝,需要從兩個(gè)方面考慮。

  1. 將對(duì)象的成員變量和實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái),不允許外部直接訪問(wèn)。
  2. 把方法暴露出來(lái),讓方法來(lái)控制對(duì)這些成員變量進(jìn)行安全的訪問(wèn)和操作。

2、訪問(wèn)修飾符:

Java提供了3個(gè)訪問(wèn)修飾符:public、protected和private,另外還有一個(gè)默認(rèn)的修飾符default,Java的訪問(wèn)控制級(jí)別如下圖所示:

下面來(lái)詳細(xì)介紹一下四個(gè)訪問(wèn)修飾符:

  • private(當(dāng)前類(lèi)訪問(wèn)權(quán)限):如果類(lèi)里的一個(gè)成員(包括成員變量、方法和構(gòu)造器等)使用private訪問(wèn)控制符來(lái)修飾,則這個(gè)成員只能在當(dāng)前類(lèi)的內(nèi)部被訪問(wèn)。很顯然,這個(gè)訪問(wèn)控制符用于修飾成員變量最合適,使用它來(lái)修飾成員變量就可以把成員變量隱藏在該類(lèi)的內(nèi)部。
  • default(包訪問(wèn)權(quán)限):如果類(lèi)里的一個(gè)成員(包括成員變量、方法和構(gòu)造器等)或者一個(gè)外部類(lèi)不使用任何訪問(wèn)控制符修飾,就稱它是包訪問(wèn)權(quán)限的,default 訪問(wèn)控制的成員或外部類(lèi)可以被相同包下的其他類(lèi)訪問(wèn)。關(guān)于包的介紹請(qǐng)看5.4.3節(jié)。
  • protected(子類(lèi)訪問(wèn)權(quán)限):如果一個(gè)成員(包括成員變量、方法和構(gòu)造器等)使用protected訪問(wèn)控制符修飾,那么這個(gè)成員既可以被同一個(gè)包中的其他類(lèi)訪問(wèn),也可以被不同包中的子類(lèi)訪問(wèn)。在通常情況下,如果使用protected來(lái)修飾一個(gè)方法,通常是希望其子類(lèi)來(lái)重寫(xiě)這個(gè)方法。
  • public(公共訪問(wèn)權(quán)限):這是一個(gè)最寬松的訪問(wèn)控制級(jí)別,如果一個(gè)成員(包括成員變量、方法和構(gòu)造器等)或者一個(gè)外部類(lèi)使用public訪問(wèn)控制符修飾,那么這個(gè)成員或外部類(lèi)就可以被所有類(lèi)訪問(wèn),不管訪問(wèn)類(lèi)和被訪問(wèn)類(lèi)是否處于同一個(gè)包中,是否具有父子繼承關(guān)系。

掌握了訪問(wèn)修飾符后,我們就可以來(lái)使用封裝了。

public class Person {private String username;private Integer age;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

復(fù)制

上述代碼Person類(lèi)中有兩個(gè)成員變量username和age,它們都是私有變量,外部不能訪問(wèn),但是提供了get和set方法,通過(guò)這兩個(gè)方法便可以修改和獲取Person類(lèi)中的相關(guān)數(shù)據(jù),這就是封裝

3、java中的包是什么?

記得我上初中的時(shí)候,班級(jí)有兩個(gè)同名的同學(xué),都叫王健,老師每次叫王健的時(shí)候他倆不知道叫的是誰(shuí),后來(lái)加上性別區(qū)分,一個(gè)叫男王健,一個(gè)叫女王健,這次區(qū)分開(kāi)。

那么我們?cè)趈ava中會(huì)不會(huì)遇到這種情況呢?當(dāng)然會(huì),比如就Person這個(gè)類(lèi)而言,在一個(gè)大型項(xiàng)目中,多人協(xié)作開(kāi)發(fā),你寫(xiě)了一個(gè)類(lèi)叫Person,我也寫(xiě)個(gè)類(lèi)叫Person,那么該如何區(qū)分這兩個(gè)類(lèi)呢?總不能一個(gè)叫男Person,一個(gè)叫女Person吧,哈哈。這時(shí)候java就引入了包的機(jī)制,允許在類(lèi)名前面加上一個(gè)前綴來(lái)限制這個(gè)類(lèi),提供了類(lèi)的多層命名空間

注意:

1、package語(yǔ)句必須作為源文件的第一條非注釋性語(yǔ)句,一個(gè)源文件只能指定一個(gè)包,即只能包含一條package語(yǔ)句,該源文件中可以定義多個(gè)類(lèi),則這些類(lèi)將全部位于該包下。 2、如果沒(méi)有顯式指定package語(yǔ)句,則處于默認(rèn)包下。在實(shí)際企業(yè)開(kāi)發(fā)中,通常不會(huì)把類(lèi)定義在默認(rèn)包下,但本書(shū)中的大量示例程序?yàn)榱撕?jiǎn)單起見(jiàn),都沒(méi)有顯式指定package語(yǔ)句。 3、同一個(gè)包下的類(lèi)可以自由訪問(wèn)

三、多態(tài):

1、多態(tài)的概念:

多態(tài)是指允許不同類(lèi)的對(duì)象對(duì)同一消息做出響應(yīng)。即同一消息可以根據(jù)發(fā)送對(duì)象的不同而采用多種不同的行為方式。(發(fā)送消息就是函數(shù)調(diào)用)

2、多態(tài)的作用:

消除類(lèi)型之間的耦合關(guān)系。

3、多態(tài)產(chǎn)生的條件:

  1、要有繼承;

  2、要有重寫(xiě);

  3、父類(lèi)引用指向子類(lèi)對(duì)象。

4、多態(tài)的優(yōu)點(diǎn):

1、可替換性(substitutability)。多態(tài)對(duì)已存在代碼具有可替換性。例如,多態(tài)對(duì)圓Circle類(lèi)工作,對(duì)其他任何圓形幾何體,如圓環(huán),也同樣工作。

2、可擴(kuò)充性(extensibility)。多態(tài)對(duì)代碼具有可擴(kuò)充性。增加新的子類(lèi)不影響已存在類(lèi)的多態(tài)性、繼承性,以及其他特性的運(yùn)行和操作。實(shí)際上新加子類(lèi)更容易獲得多態(tài)功能。例如,在實(shí)現(xiàn)了圓錐、半圓錐以及半球體的多態(tài)基礎(chǔ)上,很容易增添球體類(lèi)的多態(tài)性。

3、接口性(interface-ability)。多態(tài)是超類(lèi)通過(guò)方法簽名,向子類(lèi)提供了一個(gè)共同接口,由子類(lèi)來(lái)完善或者覆蓋它而實(shí)現(xiàn)的。如圖8.3 所示。圖中超類(lèi)Shape規(guī)定了兩個(gè)實(shí)現(xiàn)多態(tài)的接口方法,computeArea()以及computeVolume()。子類(lèi),如Circle和Sphere為了實(shí)現(xiàn)多態(tài),完善或者覆蓋這兩個(gè)接口方法。

4、靈活性(flexibility)。它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率。

5、簡(jiǎn)化性(simplicity)。多態(tài)簡(jiǎn)化對(duì)應(yīng)用軟件的代碼編寫(xiě)和修改過(guò)程,尤其在處理大量對(duì)象的運(yùn)算和操作時(shí),這個(gè)特點(diǎn)尤為突出和重要。

Java中多態(tài)的實(shí)現(xiàn)方式:接口實(shí)現(xiàn),繼承父類(lèi)進(jìn)行方法重寫(xiě),同一個(gè)類(lèi)中進(jìn)行方法重載。

5、經(jīng)典的多態(tài)案例:

class Animal{public void eat() {}
}class Cat extends Animal
{public void eat(){System.out.println("吃魚(yú)");}public void catchMouse(){System.out.println("抓老鼠");}
}class Dog extends Animal
{public void eat(){System.out.println("吃骨頭");}public void kanJia(){System.out.println("看家");}
}public class AnimalTest {public static void main(String[] args) {Animal cat=new Cat();//向上轉(zhuǎn)型cat.eat();Animal dog=new Dog();dog.eat();//Cat c=(Cat)cat;//向上轉(zhuǎn)型}
}

復(fù)制

Animal是父類(lèi),它有兩個(gè)之類(lèi)分別是Dog和Cat,之類(lèi)分別重寫(xiě)了父類(lèi)的eat方法。

輸出結(jié)果:

吃魚(yú)
吃骨頭

復(fù)制

從輸出結(jié)果可以看出,同樣都是Animal,但是卻有不同的行為表現(xiàn),這就是多態(tài)

6、向上轉(zhuǎn)型和向下轉(zhuǎn)型:

1、向上轉(zhuǎn)型:就以上述的父類(lèi)Animal和一個(gè)子類(lèi)Dog來(lái)說(shuō)明,當(dāng)父類(lèi)的引用可以指向子類(lèi)的對(duì)象時(shí),就是向上類(lèi)型轉(zhuǎn)換:Animal cat=new Cat();

2、向下轉(zhuǎn)型:向下類(lèi)型轉(zhuǎn)換(強(qiáng)制類(lèi)型轉(zhuǎn)換),是大類(lèi)型轉(zhuǎn)換到小類(lèi)型(有風(fēng)險(xiǎn),可能出現(xiàn)數(shù)據(jù)溢出)。例如:Cat c=(Cat)cat

7、重寫(xiě)和重載:

重寫(xiě):父類(lèi)與子類(lèi)之間的多態(tài)性,對(duì)父類(lèi)的函數(shù)進(jìn)行重新定義。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。在Java中,子類(lèi)可繼承父類(lèi)中的方法,而不需要重新編寫(xiě)相同的方法。

重載:方法重載是讓類(lèi)以統(tǒng)一的方式處理不同類(lèi)型數(shù)據(jù)的一種手段。多個(gè)同名函數(shù)同時(shí)存在,具有不同的參數(shù)個(gè)數(shù)/類(lèi)型。重載是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。

重載發(fā)生在一個(gè)類(lèi)當(dāng)中,重寫(xiě)發(fā)生在兩個(gè)類(lèi)當(dāng)中,但是這兩個(gè)類(lèi)是父子類(lèi)的關(guān)系。

http://aloenet.com.cn/news/41967.html

相關(guān)文章:

  • 江蘇建設(shè)網(wǎng)站bt磁力兔子引擎
  • 青建集團(tuán)股份有限公司sem推廣優(yōu)化
  • 搭建什么網(wǎng)站好玩唐山百度seo公司
  • wordpress和laravel鄭州seo關(guān)鍵詞
  • 做良心網(wǎng)站seo的優(yōu)化步驟
  • 企業(yè)網(wǎng)站管理seo1視頻發(fā)布會(huì)
  • 怎么樣做國(guó)際網(wǎng)站生意seo知識(shí)培訓(xùn)
  • 鄭州旅游網(wǎng)站設(shè)計(jì)小學(xué)生一分鐘新聞播報(bào)
  • 企業(yè)管理培訓(xùn)課程課件南寧seo外包服務(wù)
  • 網(wǎng)站開(kāi)發(fā)到發(fā)布佛山優(yōu)化推廣
  • 微信做模板下載網(wǎng)站有哪些企業(yè)網(wǎng)站制作流程
  • 效果圖網(wǎng)站模板南寧網(wǎng)站seo外包
  • 集美網(wǎng)站開(kāi)發(fā)重慶企業(yè)免費(fèi)建站
  • 網(wǎng)站建設(shè)公司做銷(xiāo)售好不好哪個(gè)公司的網(wǎng)站制作
  • 洛陽(yáng)網(wǎng)站建設(shè)好做不怎么安裝百度
  • 安徽省做網(wǎng)站武漢百度推廣代運(yùn)營(yíng)
  • 如何給自己的公司網(wǎng)站做優(yōu)化百度關(guān)鍵詞怎么做排名
  • 做百度移動(dòng)網(wǎng)站優(yōu)網(wǎng)站日常維護(hù)有哪些
  • 怎么區(qū)分模板網(wǎng)站和定制網(wǎng)站網(wǎng)絡(luò)推廣都有什么方式
  • 什么網(wǎng)站做招聘效果好銷(xiāo)售找客戶的app
  • 泰州企業(yè)建站系統(tǒng)下列哪些店鋪適合交換友情鏈接
  • 洛陽(yáng)市河陽(yáng)建設(shè)工程有限公司網(wǎng)站站長(zhǎng)之家查詢網(wǎng)
  • 上海網(wǎng)絡(luò)推廣公司外包合肥seo排名扣費(fèi)
  • 廣州網(wǎng)站建設(shè)建設(shè)南寧seo網(wǎng)絡(luò)推廣
  • 讓做網(wǎng)站策劃沒(méi)經(jīng)驗(yàn)怎么辦成都私人網(wǎng)站建設(shè)
  • 怎么做直播室的網(wǎng)站百度應(yīng)用平臺(tái)
  • 哪家公司做企業(yè)網(wǎng)站百度pc網(wǎng)頁(yè)版入口
  • 怎建立自己網(wǎng)站做淘寶客軟文寫(xiě)作的十大技巧
  • 杭州網(wǎng)站制作報(bào)價(jià)谷歌優(yōu)化培訓(xùn)
  • 寶塔面板怎么搭建網(wǎng)站關(guān)鍵詞優(yōu)化方法有什么步驟