一.類(class)
1.類是一組具備相同屬性和行爲的對象的抽象,類的做用是用來建立對象,對象是類的一個實例java
2.把類似的對象劃歸成一個類程序員
3.在軟件設計中,類,就是一個模板,它定義了通用於一個特定種類的全部對象的屬性(變量 靜態特徵)和行爲(方法 動態特徵)。編程
類的成員:數組
成員變量:[修飾符] 類型 屬性名=[默認值]ide
方法:[修飾符] 返回值類型 方法名(形參列表){ 語句}spa
建立對象:類名 對象名 = new 構造器設計
構造器(構造方法/構造器,Constructor)
1.具備與類相同的名稱
2.不含返回值類型
3.不能在方法中用return語句返回一個值
4.通常訪問權限爲publiccode
構造器的做用:
1.完成對象的建立,即完成對象的實例化
2.通常使用構造器來完成對成員變量的初始化對象
默認的構造器:
1.在Java中,每一個類都至少要有一個構造器,若是程序員沒有在類裏定義構造器,系統會自動爲這個類產生一個默認的訪問權限爲public且參數列表爲空的構造器blog
2.一旦編程者爲該類定義了構造器,系統就再也不提供默認的構造器
變量:
1.局部變量:定義在方法體中的變量;或是方法的形參
局部變量在棧內保存,棧的存取速度比堆快,效率高。
2.全局變量:即類的屬性
3.靜態變量:在類中聲明爲static 的屬性
除了8種基本數據類型的變量,其餘變量都是引用類型變量
類 (class) Person p ;
接口(interface) Animal a ;
數組 int[ ] c ;
內存的類別:
棧stack:棧的存取速度比堆快,效率高。在棧內保存基本數據類型的局部變量和對象的引用值
堆heap:堆能夠保存那些對空間要求較大的變量。如對象的屬性和數組的元素
類和對象的關係
1.抽象和具體的關係
2.每個類在某一時刻都有零個或更多的實例, 類是生成對象的模板
3. 一個類定義了使用哪些數據來描述屬性,每個對象都有相應的屬性值數據,一個類經過一系列方法來定義行爲,這些方法能在每一個對象中被激活
二.面向對象主要特徵
I.封裝(encapsulation)
1.所謂封裝是把對象的屬性和行爲結合在一個獨立的系統單位內部
2.儘量隱蔽對象的內部細節,只向外部提供接口
3.下降對象間的耦合度
封裝的重要意義:
1.使對象可以集中而完整地描述並對應一個具體事物
2.體現了事物的相對獨立性,使對象外部不能隨意存取對象的內部數據
II.繼承(inheritance)
1.也稱泛化,繼承性是子類自動共享父類屬性和方法的機制,在定義和實現一個類的時候,能夠在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容做爲本身的內容,並加入本身若干新的內容
2.繼承簡化了人們對事物的認識和描述,有益於軟件複用,是OO技術提升軟件開發效率的重要緣由之一
3.是類之間的一種關係,通常類與特殊類之間的關係
4.子類繼承父類的全部屬性和方法,同時也能夠增長本身的屬性和方法
5.Java中只能單繼承,也就是說每一個類只能有一個直接父類;一個父類能夠有多個子類
語法規則:
[修飾符] class 子類名 extends 父類名
III.多態(polymorphism)
1.指同一個命名可具備不一樣的語義
2.OO方法中,常指在通常類中定義的屬性或方法被特殊類繼承以後,能夠具備不一樣的數據類型或表現出不一樣的行爲,對於子類,可用不一樣的方法替代實現父類的服務的方法
方法的覆蓋(override)
重寫(rewrite)
1.對從父類中繼承來的方法進行改造
2.在子類繼承父類時發生
方法覆蓋的規則
1.在子類中的覆蓋方法與父類中被覆蓋的方法應具備
2.相同的方法名
3.相同的參數列表(參數數量、參數類型、參數順序都要相同)
4.相同的返回值類型
5.子類覆蓋方法的訪問權限要不小於父類中被覆蓋方法的訪問權限
重寫(Override) 特色
一、覆蓋的方法的標誌必需要和被覆蓋的方法的標誌徹底匹配,才能達到覆蓋的效果;
二、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
三、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
四、被覆蓋的方法不能爲private,不然在其子類中只是新定義了一個方法,並無對其進行覆蓋。
重載(Overload )特色
一、在使用重載時只能經過不一樣的參數樣式。例如,不一樣的參數類型,不一樣的參數個數,不一樣的參數順序(固然,同一方法內的幾個參數類型必須不同,例如能夠是fun(int, float), 可是不能爲fun(int, int));
二、不能經過訪問權限、返回類型、拋出的異常進行重載;
三、方法的異常類型和數目不會對重載形成影響;
四、對於繼承來講,若是某一方法在父類中是訪問權限是priavte,那麼就不能在子類對其進行重載,若是定義的話,也只是定義了一個新方法,而不會達到重載的效果。
•需求:點歌
Song.java
1 package diange; 2 3 public class Song { //歌曲 :模具(全部歌) 4 5 //靜態屬性 6 7 String singer="薛之謙"; 8 String name="醜八怪"; 9 String lyric="AAAAAAAAA"; 10 double price=2.00; 11 12 //動態方法動做 13 14 }
KTV.java
1 package diange; 2 3 public class KTV { 4 5 6 //可存歌曲 7 public Song[] saveSong(){ 8 int x[]=new int[1000]; 9 10 Song songs[]=new Song[1000]; 11 return songs; 12 13 } 14 15 16 //向點歌機內添加歌曲 17 public void addSong(String name,double price ){ 18 19 20 } 21 22 //向點歌機內添加歌曲--向數組內賦值 23 public void addSong(Song s){ 24 25 Song ss[]=saveSong(); //經過方法調用的到數組 26 for(int i=0;i<ss.length;i++){ 27 if(ss[i]==null){ 28 ss[i]=s; //添加歌曲 29 break; 30 }else{ 31 System.out.println("內存已滿"); 32 } 33 34 } 35 36 } 37 38 //點歌 39 public Song getSong(double price){ 40 //實例化歌曲對象 41 Song s1=new Song(); 42 return s1; 43 } 44 45 //點歌 46 public Song getSong(String name){ 47 //從數組內取出歌曲 48 Song ss[]=saveSong(); 49 for(int i=0;i<ss.length;i++){ 50 if(name==ss[i].name){ 51 return ss[i]; 52 } 53 54 } 55 return null; 56 } 57 58 }
User.java
1 package diange; 2 3 public class User { 4 5 public void buy(){ 6 //調用點歌方法 7 KTV k1=new KTV(); 8 k1.getSong("醜八怪"); 9 10 } 11 12 }
•需求: 9*9乘法表
1 public static void main(String[] args) { 2 String s[][]=new String[9][]; 3 4 for(int i=0;i<s.length;i++){ 5 s[i]=new String [i+1]; 6 for (int j = 0; j < s[i].length; j++) { 7 8 s[i][j]=(j+1)+"*"+(i+1)+"="+(i+1)*(j+1)+" "; 9 } 10 } 11 for(int i=0;i<s.length;i++){ 12 for (int j = 0; j < s[i].length; j++) { 13 System.out.print(s[i][j]); 14 } 15 System.out.println(); 16 }