1 面向?qū)ο?/h1>
面向?qū)ο笫蔷幊痰囊环N思維方式震叙。
分析思路:面對程序設(shè)計(jì)時(shí)筒扒,分析有什么對象护奈,對象有什么數(shù)據(jù)(屬性),對象有什么操作方法唱较。
2 對象
萬事萬物都是對象
對象強(qiáng)調(diào)的是一個(gè)具體的個(gè)體
例如:楊樹就不是對象扎唾,在小河邊的那個(gè)楊樹才是對象,強(qiáng)調(diào)的是個(gè)體南缓。
2.1 對象的構(gòu)成
2.1.1對象是由數(shù)據(jù)和操作構(gòu)成
對象的狀態(tài)是指對象的數(shù)據(jù)胸遇,對象的狀態(tài)由變量表示,也叫對象的屬性汉形。
對象的行為是指對象的功能纸镊,對象的行為由方法表示倍阐。
例如:
學(xué)生對象{
數(shù)據(jù):姓名、成績
行為:聽課逗威,做作業(yè)
}
2.1.2對象的創(chuàng)建
對象是由類實(shí)例化時(shí)創(chuàng)建的峰搪,因此創(chuàng)建對象必須先定義類。
類是對象的模板凯旭,類中定義了什么屬性和方法概耻,由這個(gè)類實(shí)例化的對象就有什么屬性和方法。
類是一次性定義尽纽,對象可以多次創(chuàng)建咐蚯。
3 類
3.1 類的定義
類是具有相同的狀態(tài)和相同的行為的一組對象的集合。
3.2 類和對象的關(guān)系
類和對象的關(guān)系就如同模具和用這個(gè)模具制作出來的物品之間的關(guān)系弄贿。一個(gè)類給出它的全部對象的一個(gè)統(tǒng)一的定義春锋,而它的每個(gè)對象則是符合這種定義的一個(gè)實(shí)體(也稱作實(shí)例),因此類和對象的關(guān)系就是抽象和具體的關(guān)系差凹。
3.3 類的構(gòu)成
類是由屬性和方法構(gòu)成的
3.4 類的創(chuàng)建
public class 類名 {
//可編寫0至n個(gè)屬性
數(shù)據(jù)類型 變量名1期奔;
數(shù)據(jù)類型 變量名2;
//可編寫0至n個(gè)方法
修飾符 返回值類型 方法名(參數(shù)){
執(zhí)行語句;
}
}
示例:
public class Student {
//類的屬性(類的狀態(tài))
String name;
int score;
String no;
//類的方法(類的行為)
public void play(){
System.out.printf("我的名字是%s,我的成績是%d,我的學(xué)號是%s",name,score,no);
}
}
注意:
- public類的類名必須和類所在文件的文件名一致
- 如果不是public類危尿,那么類名與類所在的文件名可以不一致
- 類名的命名規(guī)范是:帕斯卡命名法
4 實(shí)例化對象
通過類創(chuàng)建對象的過程稱為類的實(shí)例化呐萌。實(shí)例化的結(jié)果是產(chǎn)生了一個(gè)實(shí)例,實(shí)例也叫對象谊娇。
類名 對象名 = new 類名();
示例:
Student s1 =new Student();
Student s2 =new Student();
5 類和對象的區(qū)別
- 類是對某一類事物的抽象描述肺孤,不是具體的個(gè)體
- 對象是對某一事物的具體描述,是具體的個(gè)體
6 方法的重載
在同一個(gè)類中:同名不同參济欢,與返回值無關(guān)赠堵。
示例:
public class Student{
public void play(){
}
public int play(int time){
return 0;
}
}
7 構(gòu)造方法
構(gòu)造方法也叫構(gòu)造函數(shù),或者叫構(gòu)造器
- 構(gòu)造方法的方法名必須與類名相同
- 構(gòu)造方法沒有返回值法褥,也不寫void
示例:
class Student {
//構(gòu)造方法
Student(){
}
}
7.1 構(gòu)造方法的作用
為對象的屬性初始化茫叭。
8 變量
變量分為局部變量和成員變量
8.1 局部變量
定義在方法中的變量
示例:
public void sayHello(){
int height = 20;//局部變量
}
8.2 成員變量
成員變量是類的屬性,是定義在類內(nèi)半等,方法外的變量揍愁。
示例:
class Student {
String name;
int score;
String no;
}
9 面向?qū)ο蟮娜筇匦?/h1>
9.1 封裝
為了保護(hù)數(shù)據(jù),用訪問修飾符實(shí)現(xiàn)封裝
9.1.1 訪問修飾符
- public:公共的
- protected:受保護(hù)的
- 默認(rèn) | default(什么都不寫)
- private:私有的
9.1.1.1 public
public修飾的屬性沒有訪問限制杀饵,是最寬松的封裝莽囤。
示例:
public class Person {
public String name;//公有
}
name可以在任何地方被訪問呢,也就是可以讀和寫
pubilc修飾類:類可以在任何地方被訪問
public修飾屬性和方法:屬性和方法可以在任何地方被訪問
9.1.1.2 protected
被protected修飾的屬性或方法在子類中一定可以訪問切距。無論子類是否與父類在一個(gè)包里烁登。同包也可以訪問。
示例:
package com.sunmer.tmp;
public class Father {
protected int age;
int weight;
}
package com.sunmer.tmp;
public class Sub1 extends Father{
public static void main(String[] args) {
Sub1 sub1 = new Sub1();
sub1.age= 1;//可以訪問
sub1.weight = 1;//可以訪問
}
}
package com.sunmer.oop;
import com.sunmer.tmp.Father;
public class Sub2 extends Father {
public static void main(String[] args) {
Sub2 sub2 = new Sub2();
sub2.age = 0;//可以訪問
}
}
9.1.1.3 private
private修飾的屬性只能在類內(nèi)被訪問,類外無法訪問饵沧,是最嚴(yán)格的封裝锨络。
示例:
public class Person {
private String name;//私有
}
name屬性只能在Person類的類內(nèi)使用,類外無法使用狼牺。
注意:
private不能修飾類
private class Classinfo{//報(bào)錯(cuò)羡儿,private不能修飾類
}
public class Student {
}
private可以修飾類的成員,無論類的成員是什么是钥。
示例:
public class Student {
int age;
private class Classinfo{//不報(bào)錯(cuò)掠归,因?yàn)镃assinfo類是Student類的成員
}
}
9.2 繼承
9.2.1 繼承的優(yōu)點(diǎn)
- 繼承的出現(xiàn)提高了代碼的復(fù)用性,提高軟件開發(fā)效率悄泥。
- 繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系虏冻,提供了多態(tài)的前提。
9.2.2 繼承的定義
在程序中弹囚,如果想聲明一個(gè)類繼承另一個(gè)類厨相,需要使用extends關(guān)鍵字。
class 子類 extends 父類 {
}
9.2.3 繼承的注意事項(xiàng)
9.2.3.1 類只支持單繼承鸥鹉,不允許多繼承
class A{}
class B{}
class C extends A,B{} // C類不可以同時(shí)繼承A類和B類
9.2.3.2 多個(gè)類可以繼承一個(gè)父類
class A{}
class B extends A{}
class C extends A{} // 類B和類C都可以繼承類A
9.2.3.3 允許多層繼承
class A{}
class B extends A{} // 類B繼承類A蛮穿,類B是類A的子類
class C extends B{} // 類C繼承類B,類C是類B的子類毁渗,同時(shí)也是類A的子類
9.3 多態(tài)
多態(tài)就是多種形態(tài)践磅,多種形式。
9.3.1 多態(tài)的語法格式
多態(tài)的定義格式:就是父類的引用變量指向子類對象
父類類型 變量名 = new 子類類型();
變量名.方法名();
Pet pet = new Cat();
pet.toString();