Java基礎部分--面向對象基礎(1)

一.類(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         }
相關文章
相關標籤/搜索