( 一 ) 條件:
同一機構(同一資料)
多個Class 中將相同意思
的 attribute ( field metlod)
同定義在 Class
範例:
1)A => A () ;
=> reference
=> is a
A is a A
A is a school
A has a eng
A has a shour()
A has a name
A has a chi
B is a B
B is a school
B har a math
B has a shiw( )
B has a name
B has a chi
例子:
class A extends school
{
int eng;
void show()
{
System.out.println("名:"+name+
"\t國文:"+chi+
"\t英文:"+eng);
}
}
class B extends school
{
int math;
void show()
{
System.out.println("名:"+name+
"\t國文:"+chi+
"\t數學:"+math);
}
}
class add
{
public static void main(String args[])
{
A a=new A();
B b=new B();
a.show();
b.show();
}
}
class school
{
String name;
double chi;
}
執行結果:
繼承 ( 應用 )
( 一 ) 先處理 1s - a 關係( 繼承 成功 )
=> coustrutors
1.一定要繼承 一定會要執行
=> superClass 的建構式
2.superClass 與 subClass 都有建構式
執行 順序為 => super => sud
(父 ===>子)
3.superClass 的建構式 有設計需要為 合引數 => 繼承的子類別 需透過子類別的建構式 給 superClass 引數
=> ※super (值; 變數);
4.父類別建構式為 Overloading
=> 繼承的子類別只需要選一個繼承 即可
( 二 ) 分析方式 = > 每個class
1. coupling => 耦合 = > 相依性 => 相同意思的屬性,每個class 共同屬性
2.cohesion = > 內聚力 => 相關性=> 每個class 自己才有個屬性其他class沒有
( 父 ) ( 子 ) ( 繼承 )
(三) superClass , subClass , extends
( 四 ) 新增物件方式 => new 子類別物件
( 五 ) 判斷物件的類型 (reference ) 與 屬性 ( field , method )
先 => 1 is a => 確定此子類別一共具有多少class reference
( 包括自己與 super class 數量 )
在 => 2. has - a => 確定 reference 後 在查找有多少屬性可以使用
( field , method ) => cal by value
給定下面程式碼,哪些選項的描述是對的?(選擇3個) (答案) : A .C .E 02. class Dog extends Animal{Tail tail;} 03. class Beagle extends Dog{public void jumper(){}} 04. class Cat extends Animal{public void jumper(){}} A. Cat is-a Animal B. Cat is-a jumper C. Dog is-a Animal D. Dog is-a jumper E. Beagle has-a Tail
1.程式碼如下,請問最後結果為何?
01. class Excute{ 02. public static void main(String args[]){ 03. int[] a={4,3,2}; 04. int i=a.length>0 ? a[0]:null; 05. System.out.println(i); 06. } 07. } A. 4 B. 3 C. 2 D. null E. 編譯失敗
\\ 答案LB length 為3 因{4,3,2}
2.程式碼如下,請問最後結果為何?
01. import java.util.Arrays; 02. class Search{ 03. public static void main(String args[]){ 04. String a[]={"b","r","g","y","o"}; 05. Arrays.sort(a); 06. int i1=Arrays.binarysearch(a,"o"); 07. int i2=Arrays.binarySearch(a,"v"); 08. System.out.println(i1+""+i2); 09. } 10. } A. 3-4 B. 3-5 C. 2-5 D. 2-4 E. 編譯失敗 F. 執行失敗
答案 : C 因為 Arrays.sort會進行排序 順序變成a[]={"b","g","o","r","y"}; 因為沒有 V 所以回傳 負數3.程式碼如下,請問最後結果為何? 01. import java.util.Arrays; 02. class Execute{ 03. public static void main(String args[]){ 04. String[] a[]={{"1","2"},{"3","4","5"}}; 05. String[][] b=a; 06. System.out.println(b[1][2]); 07. } 08. } A. 1 B. 2 C. 3 D. 4 E. 5 F. 編譯失敗 G. 執行失敗
答案 : G a 會傳直 給 B 所以 a 跟 B 一樣 [1][2] 會是 54.程式碼如下,請問最後結果為何? 01. String[] str=null; 02. System.out.println(str.length); A. 0 B. null C. 1 D. 編譯失敗 E. 執行失敗 答案是 E 因length 是陣列數量 但值為空值 故找不到 所以抱錯! 如果改成 System.out.println(str); 答案會換成B 空值 5.程式碼如下,請問最後結果為何? 01. import java.util.Arrays; 02. class Execute{ 03. public static void main(String args[]){ 04. String[] s1={"1","2","3"}; 05. String[] s2={"4","5","6"}; 06. s1=s2; 07. for(String str:s1) 08. {System.out.println(str);} 09. } 10. } A. 123 B. 456 C. 編譯失敗 D. 執行失敗
答案是 B 同第三題 S1 會跟S2 一樣 故打印出來 是 456
舉例:
class school
{
private String name;
private int chi;
school(String name)
{
this.name=name;
System.out.println("新增一位school學生 name="+this.name);
}
school(String name,int chi)
{
this.name=name;
System.out.println("新增一位school學生 name="+this.name+chi);
}
}
class A extends school
{
ing eng;
A(String name,int eng)
{
super(name);
this.eng = eng;
System.out.println("A班學員"+this.eng);
}
A(String name,int chi,int eng)
{
/*建構式的兩個值 (name,chi) 加上 eng
*/
super(name,chi);
this.eng=eng;
System.out.println("A班學員 eng="+this.eng);
}
}
import java.util.Arrays;
class add
{
public static void main(String args[])
{
school s=new school("a",75);
//A a = new A("rr",98);
}
}
class A_1 extends A
{
private int word;
A_1(String name, int chi ,int eng.int word)
{
super(name,chi,eng);
this.word = word
System.out.println("111");
}
}
class B extends school
{
private int math;
B(String name,int chi ,int math)
{
super (name,chi);
this.math =math;
}
}
class B_1 extends B
{
private int exxel;
B_1 (String name,int chi ,int math,int excel)
{
super(name,chi,math);
this.exxel = excel;
}
}
執行結果:
繼承
( 三 ) has - a =>( field,method)
1.field => 沒有 設定 封裝 直接繼承
2.method => 應用狀況
a) Overriding => 多種狀況 同 一 classs 或 不同 class 都可設計
1). 多稱一樣
2) 引數不一樣
b) Override => 子類別方法把反類別方法 至換掉.
1) 名稱 一樣 引數 一樣
2) 類型(傳值 ,不傳值) 也要一樣 只要符合第一點會強制要求
3) 如果父類別的方法有設定封裝權限 子類別方法的權限 要比父類別大 或 相等
=> public > protected > (沒寫) > private
=> super ".點" 方法
類別 變數 = new 類別(引數);
類別 => call by referene => 確定物件類型 (所有 is - a) => 檢查方法(名稱)
class school
{
private String name;
private int chi;
school(String name)
{
this.name=name;
System.out.println("新增一位school學生 name="+this.name);
}
school(String name,int chi)
{
this.name=name;
this.chi = chi;
//System.out.println("新增一位school學生 name="+this.name+chi"\t國文:" + chi);
}
String getName()
{
return name;
}
int getChi()
{
return chi;
}
void setName(String name)
{
this.name=name;
}
void setChi(int chi)
{
this.chi=chi;
}
void change(String name)
{
this.name=name;
}
void change(int chi)
{
this.chi=chi;
}
void change(String name,int chi)
{
this.name=name;
this.chi=chi;
}
protected String show()
{
return "名:"+name+"\t國文:"+chi;
}
}
class A extends school
{
private int eng;
A(String name,int eng)
{
super(name);
this.eng = eng;
System.out.println("A班學員"+this.eng);
}
A(String name,int chi,int eng)
{
/*建構式的兩個值 (name,chi) 加上 eng
*/
super(name,chi);
this.eng=eng;
//System.out.println("A班學員 eng="+this.eng);
}
int getEng()
{
return eng;
}
void change(String name,int chi,int eng)
{
}
void setEng(int eng)
{
this.eng=eng;
}
public String show()
{
return super.show()+"\t英文:"+eng;
}
/*
public String show()
{
return "名字:"+getName()+"\t國文 :"+getChi()+"\t英文:"+eng;
}
*/
}
import java.util.Arrays;
class add
{
public static void main(String args[])
{
//school s=new school("a",75);
//A a = new A("rr",98);
A a=new A("a",78,89);
System.out.println(a.show());
/*
System.out.println("======================");
a.setName("qq");
System.out.println("名:"+a.getName());
System.out.println(a.show()); //原本國文60 下面使用 方法修改
System.out.println("======================");
//a.setChi(60); //修改成60
achange("qq")
System.out.println("名:"+a.getChi());
System.out.println(a.show());
*/
}
}
class A_1 extends A
{
private int word;
A_1(String name, int chi ,int eng.int word)
{
super(name,chi,eng);
this.word=word;
}
}
執行結果:
Polymorphic 多型 (new 物件)
(一) 條件背景 => 繼承應用
多個子類別 有共同 父類別
(二) new 物件語法 : 異質 宣告物件
父類別 物件名 = new 子類別(引數)
.上面 父類別 跟 子類別 需要有 繼承關係
父類別
1.call by refereme
2. 物件 15 - a
3.確定 物件呼叫方法 有此名子
子類別
1.call by value
2.執行時找內容的起點 class
※使用得方法 使限定
1.override
2.繼承
(三) 真正活用 => 搭配陣列
class student
{
private String name;
student(String name)
{
this.name=name;
}
String show()
{
return "名:"+name;
}
void setName(String name)
{
this.name=name;
}
void setWord(int word)
{
}
}
class SA extends student
{
private int word;
SA(String name,int word)
{
super(name);
this.word=word;
}
String show()
{
return super.show()+"\tword:"+word;
}
void setWord(int word)
{
this.word=word;
}
}
class SB extends student
{
private int excel;
SB(String name,int excel)
{
super(name);
this.excel=excel;
}
String show()
{
return super.show()+"\texcel:"+excel;
}
}
class add2
{
student[][] s=
{
{
new SA("a1",78),
new SA("a2",78),
}
,
{
new SB("b1",77),
new SB("b2",77),
new SB("b3",77),
}
};
for(int i=0;i<s.length;i++)
{
for(int j=0;j<s[i].length;j++)
{
System.out.println("s["+i+"]["+j+"]="+s[i][j]+"\t"+s[i][j].show());
}
System.out.println();
}
System.out.println("==========================");
s[0][0].setWord(88);
for(int i=0;i<s.length;i++)
{
for(int j=0;j<s[i].length;j++)
{
System.out.println("s["+i+"]["+j+"]="+s[i][j]+"\t"+s[i][j].show());
}
System.out.println();
}
/*
SA s1=new SA("a",78);
SB s2=new SB("b",77);
student s1=new SA("a",78);
student s2=new SB("b",77);
System.out.println(s1.show());
System.out.println(s2.show());
System.out.println("==========================");
s1.setName("rrr");
s1.setWord(88);
System.out.println(s1.show());
System.out.println(s2.show());
*/
}
}
執行結果:
沒有留言:
張貼留言