一基本特征
面向?qū)ο蟮幕咎卣饔腥齻€(gè):封裝性,繼承性,多態(tài)性
- 封裝性 封裝是一種信息隱藏技術(shù),封裝使數(shù)據(jù)和加工數(shù)據(jù)的函數(shù)封裝成一個(gè)整體,使用戶只看到對(duì)象的外特性,目的在于把對(duì)象的設(shè)計(jì)者和對(duì)象的使用者區(qū)別開來。
- 繼承性 繼承就是子類和父類可以共享數(shù)據(jù),子類可以直接繼承父類的全部描述,并且可以加以修改和補(bǔ)充,繼承分為單繼承和多繼承。
- 多態(tài)性
對(duì)象根據(jù)接受到的消息做出的不同的動(dòng)作。不同對(duì)象對(duì)接收到的同一消息可以產(chǎn)生不同的動(dòng)作。
二、面向?qū)ο蠛兔嫦蜻^程的區(qū)別
- 面向過程編程試講程序一步一步分解,并且按照一定的順序執(zhí)行,環(huán)環(huán)相扣,最大的缺點(diǎn)就是,如果需求發(fā)生了改變,需要改動(dòng)的太多了。
- 面向?qū)ο缶幊痰氖褂檬且榷x一個(gè)類然后用該類型下的“對(duì)象”組裝程序,對(duì)象之間通過‘消息傳遞’。最大的缺點(diǎn)是:執(zhí)行效率過低。
二、基本概念
類
類是具有相同屬性及相同動(dòng)作的一組對(duì)象。
類的聲明
- 語法
[標(biāo)識(shí)符] class 類名稱{
//類成員變量
//類的方法
}
- 類的控制符
Java的訪問權(quán)限主要有四個(gè)
- 1、默認(rèn)模式(default) 默認(rèn)模式下,不需要為某個(gè)類,方法等不加任何訪問修飾符。這類方式聲明的方法和類,只允許在同一個(gè)包(package)內(nèi)是可 以訪問的。
- 2、private(私有) 被聲明為“私有”訪問,那么他只能在當(dāng)前聲明它的類里面訪問,類和接口的訪問方式是不能被聲明為私有的
- 3、public(公有) Java中歲訪問權(quán)限控制最寬松的修飾符。如果一個(gè)方法、變量、和構(gòu)造方法和接口被定義為“公共”訪問,那么它不僅可以跨類訪問,而且允許跨包訪問。如果要訪問的其它包里有公共成員,則需要倒包。
- 4、protected(受保護(hù)的)如果一個(gè)變量、方法、和構(gòu)造方法在父類中被聲明為"保護(hù)"訪問類型,只能被類本身及其子類訪問,即使子類在不同的包也可以被訪問。
注:final類不能被繼承。
- 類的定義
[標(biāo)識(shí)符] class 類名稱{
數(shù)據(jù)類型 屬性;
類名稱 (參數(shù),...)
}
返回值的數(shù)據(jù)類型 方法名稱(參數(shù)1,參數(shù)2,...)
{
程序語句;
return表達(dá)式;
}
}
注:static修飾的成員不能訪問沒有stati修飾的成員。
- 類的屬性
定義屬性的語法:
[修飾符]屬性類型 屬性名[=默認(rèn)值]
對(duì)象
對(duì)象是類的實(shí)例化產(chǎn)物。但是對(duì)象可以定義不同的屬性。
- 對(duì)象的聲明
語法:
類名 對(duì)象名 = new 類名();
步驟:
- 1、聲明指向“由類所創(chuàng)建的對(duì)象”的變量。
- 2、利用new創(chuàng)建新的對(duì)象,并指派給先前所創(chuàng)建的變量。
舉例:
Person p = new Person();
- 對(duì)象的使用
語法:
對(duì)象名稱.屬性名 //訪問屬性
語法名稱.方法名 //訪問方法
- 匿名對(duì)象
對(duì)一個(gè)實(shí)例化的操作來講,對(duì)象真正有用的部分是在堆內(nèi)存里面,棧內(nèi)存只保存了一個(gè)對(duì)象的引用名稱。所以所謂的匿名對(duì)象是指,只開辟堆內(nèi)存空間,而沒有棧內(nèi)存指向的對(duì)象
匿名特點(diǎn):
- 1、匿名對(duì)象是沒有被其他對(duì)象所引用
- 2、由于匿名對(duì)象沒有棧內(nèi)存指向,所以其只能使用一次,時(shí)候就變成無法尋找的垃圾
- 對(duì)象的比較
- 1、“ == ”運(yùn)算符
“==”運(yùn)算符是比較兩個(gè)對(duì)象的內(nèi)存地址值(引用值)是否相等 - 2、利用“equals()”方法
equals()方法用于比較兩個(gè)對(duì)象的內(nèi)容是否一致
例:
String str1 = new String("java");
String str2 = new String("java");
str1和str2完全相等,如果用“==”運(yùn)算符比較,那就是不相等的,因?yàn)榉謩e是用new實(shí)例化了兩個(gè)String類型。如果是用“equals()”方法比較那他們就是想等的。