Posted on 2007-08-25 22:13
Java蜘蛛人 --鄭成橋 閱讀(154)
評論(0) 編輯 收藏
1
2
import java.util.*;
3
public class ManagerTest
4
{
5
public static void main (String[] args)
6
{
7
Manager boss=new Manager("xiaoqiao",8000,1989,04,11);
8
boss.SetBonus(5000);
9
Employee [] staff=new Employee[3];
10
staff[0]=boss; //父類 可以被子類轉換 .... 但是子類 不能被父類轉換.
11
staff[1]=new Employee("dddd",5000,1989,10,12);
12
staff[2]=new Employee("aaaaa",4000,1988,11,12);
if(staff[1] instanceof Manager) //staff[1] 能不能 (instanceof)轉換為: Manager
/* 我試圖把staff[1]轉換為Manager 但是失敗了 */
{
Manager aa=(Manager)staff[1];
}
else
{
System.out.println("不能裝換");
}
13
14
for(Employee e:staff)
15
System.out.println("mingzi \t"+e.getName()+"\t gongzi \t"+e.getSalary()+"\t shengri \t"+e.getHrireDay());
16
}
17
18
}
19
class Employee
20
{
21
public Employee(String n,double s,int year,int month,int day) //首先我們傳5個參數
22
{
23
name=n;
24
salary=s;
25
GregorianCalendar calendar =new GregorianCalendar(year,month -1,day);
26
hireDay=calendar.getTime();
27
}
28
public String getName() //得到名字
29
{
30
return name;
31
}
32
public double getSalary() //得到工資
33
{
34
return salary;
35
}
36
public Date getHrireDay() //得到年齡
37
{
38
return hireDay;
39
}
40
public void raiseSalary(double byPercent)
41
{
42
double raise=salary*byPercent/100;
43
salary+=raise;
44
}
45
private String name;
46
private double salary;
47
private Date hireDay;
48
}
49
class Manager extends Employee //定義一個 Manager 類繼承 Employee
50
{
51
/**//**
52
@parm n the employee's name
53
@parm s the salary
54
@parm year the hire year
55
@parm month the hire month
56
@parm day the hire day
57
*/
58
public Manager(String n,double s,int year,int month,int day)
59
{
60
super(n,s,year,month,day); //關鍵字 繼承Employee 里的方法
61
bonus=0;
62
}
63
public double getSalary() //定義一個方法重載..
64
{
65
double baseSalary=super.getSalary();
66
return baseSalary+bonus; //就是在工資的基本上加上獎金
67
}
68
public void SetBonus(double b) //定義一個方法 存儲獎金
69
{
70
bonus=b;
71
}
72
private double bonus;
73
}
動態的綁定的意思 . 假如 調用 x.f("Hello") 編譯器會挑 x.f(String) 不會挑x.f(int)
假如你子類想覆蓋 父類的方法 . 那么方法返回的類型必須是一樣的
比如:
Employee 類中有
public Employee gethaha()
{
...........
}
那么在后面的 Manager中可以 按照一樣的方法
public Manager gethaha()
{
...........
}
如果你想要覆蓋一個父類的方法的時候. 你的子類的方法不能低于父類的可見性
比如.父類是 public . 那么你子類覆蓋他 也必須是 public 否則會出現錯誤的...
今天繼承就寫這么多.
如果你想阻止繼承的話. 就用 final 修飾符.. 可以看看下面的代碼就會懂了
public class Test //假如在這加一個final就會報錯. 因為一個被final修飾的類 是不能繼承的.
{
private String name;
private double salary;
Test(String name,double salary)
{
this.name=name;
this.salary=salary;
}
public final String getName() //假如在這加一個 final 編譯不會影響什么. 因為子類沒有覆蓋這個方法
{
return name;
}
public double getsalary() //然而我們在這加一個 final 編譯就會報錯了.因為子類覆蓋了這個類.
{
return salary;
}
public static void main (String[] args)
{
Test1 t1=new Test1("xiaoqiao",80000);
t1.aaa(600);
System.out.println("小橋="+t1.getName()+"\t"+t1.getsalary());
}
}
class Test1 extends Test
{
private double bb;
public Test1(String name,double salary)
{
super(name,salary);
}
public double getsalary()
{
double aa=super.getsalary();
return aa+bb;
}
public void aaa(double bb)
{
this.bb=bb;
}
}
___作者: 鄭成橋