Java基礎九--抽象類別,java--抽象
Java基礎九--抽象類別一、抽象類別介紹
/*
抽象類別:
抽象:籠統,模糊,看不懂!不具體。
特點:
1,方法只有聲明沒有實現時,該方法就是抽象方法,需要被abstract修飾。
抽象方法必須定義在抽象類別中。該類必須也被abstract修飾。
2,抽象類別不可以被執行個體化。為什嗎?因為調用抽象方法沒意義。
3,抽象類別必須有其子類覆蓋了所有的抽象方法後,該子類才可以執行個體化。
否則,這個子類還是抽象類別。
1,抽象類別中有建構函式嗎?
有,用於給子類對象進行初始化。
2,抽象類別可以不定義抽象方法嗎?
可以的。 但是很少見,目的就是不讓該類建立對象。AWT的配接器物件就是這種類。
通常這個類中的方法有方法體,但是卻沒有內容。
abstract class Demo
{
void show1()
{}
void show2()
{}
}
3,抽象關鍵字不可以和那些關鍵字共存?
private 不行
static不行 如果是靜態話不需要對象,而抽象類別就是需要對象的
final不行
4,抽象類別和一般類的異同點。
相同點:
抽象類別和一般類都是用來描述事物的,都在內部定了成員。
不同:
1,一般類有足夠的資訊描述事物。
抽象類別描述事物的資訊有可能不足。
2,一般類中不能定義抽象方法,只能定非抽象方法。
抽象類別中可定義抽象方法,同時也可以定義非抽象方法。
3,一般類可以被執行個體化。
抽象類別不可以被執行個體化。
5,抽象類別一定是個父類嗎?
是的。因為需要子類覆蓋其方法後才可以對子類執行個體化。
*/
abstract class Demo
{
abstract /*抽象*/ void show();
}
/*
class DemoA extends Demo
{
void show()
{
System.out.println("demoa show");
}
}
class DemoB extends Demo
{
void show()
{
System.out.println("demob show");
}
}
*/
abstract class 犬科
{
abstract void 吼叫();
}
class 狗 extends 犬科
{
void 吼叫()
{
System.out.println("汪汪");
}
}
class 狼 extends 犬科
{
void 吼叫()
{
System.out.println("嗷嗷");
}
}
class AbstractDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
二、抽象類別執行個體
1 /* 2 僱員樣本: 3 需求:公司中程式員有姓名,工號,薪水,工作內容。 4 專案經理除了有姓名,工號,薪水,還有獎金,工作內容。 5 對給出需求進行資料建模。 6 7 8 9 分析: 10 在這個問題領域中,先找出涉及的對象。 11 通過名詞提煉法。 12 程式員: 13 屬性:姓名,工號,薪水、 14 行為:工作。 15 經理: 16 屬性:姓名,工號,薪水,獎金。 17 行為:工作。 18 19 20 程式員和經理不存在著直接繼承關係, 21 22 但是程式員和經理卻具有共性內容。 23 可以進行抽取。因為他們都是公司的僱員 24 25 可以將程式員和經理進行抽取.建立體系. 26 27 */ 28 29 //描述僱員。 30 31 abstract class Employee 32 { 33 private String name; 34 private String id; 35 private double pay; 36 Employee(String name,String id,double pay) 37 { 38 this.name = name; 39 this.id = id; 40 this.pay = pay; 41 } 42 43 public abstract void work(); 44 45 } 46 47 48 //描述程式員。 49 class Programmer extends Employee 50 { 51 Programmer(String name,String id,double pay) 52 { 53 super(name,id,pay); 54 } 55 public void work() 56 { 57 System.out.println("code..."); 58 } 59 } 60 61 //描述經理。 62 class Manager extends Employee 63 { 64 private int bonus; 65 Manager(String name,String id,double pay,int bonus) 66 { 67 super(name,id,pay); 68 this.bonus = bonus; 69 } 70 public void work() 71 { 72 System.out.println("manage"); 73 } 74 } 75 76 77 78 79 80 81 class AbstractTest 82 { 83 public static void main(String[] args) 84 { 85 System.out.println("Hello World!"); 86 } 87 } 88 89 90 class Person 91 { 92 private String name; 93 private int age; 94 95 Person(String name,int age) 96 { 97 this.name = name; 98 this.age = age; 99 }100 public String getName()101 {102 return name;103 }104 public void setName(String name)105 {106 this.name = name;107 }108 }109 class Student extends Person110 {111 Student(String name,int age)112 {113 super(name,age);114 }115 116 }117 class Worker extends Person118 {119 Worker(String name,int age)120 {121 super(name,age);122 }123 124 }