抽象類 抽象類和一般類的異同點
阿新 • • 發佈:2019-02-09
抽象類 abstract
說白了,就是不讓抽象類建立物件
抽象:籠統,模糊,看不懂!不具體。
當多個類中出現相同功能,但是功能主題不同,這是可以進行向上抽取的。
這時,只抽取功能定義,而不抽取功能主體。
特點:
1,抽象方法一定在抽象類中
2,抽象方法和抽象類都必須被abstract關鍵字修飾。
3,抽象類不可以new物件。
4,抽象類中的抽象方法要被使用,必須由子類覆寫所有的抽象方法後,建立自物件呼叫。如果只覆蓋部分抽象方法,那麼該子類還是抽象類。
舉例子
avstract 的類和方法,強制讓繼承他的類去覆寫,去實現方法。
還是餐廳,炒菜,我點菜,是抽象的,點完菜後,強制廚師跟我做菜,將我點的菜例項化。
有,用於給子類物件進行初始化。
2,抽象類可以不定義抽象方法嗎?
可以的。 但是很少見,目的就是不讓該類建立物件。AWT的介面卡物件就是這種類。
通常這個類中的方法有方法體,但是卻沒有內容。
abstract class Demo
{
void show1(); //這叫沒方法體
void show2()
{}//這叫有方法體沒內容。(其實有個return)
}
3,抽象關鍵字不可以和那些關鍵字共存?private 不行非法的修飾符組合
static 不行非法的修飾符組合final不行
4,抽象類一定是個父類嗎?
是的。因為需要子類覆蓋其方法後才可以對子類例項化
抽象類和一般類的異同點。
相同點:
抽象類和一般類都是用來描述事物的,都在內部定了成員。
不同:
1,一般類有足夠的資訊描述事物。
抽象類描述事物的資訊有可能不足。
2,一般類中不能定義抽象方法,只能定非抽象方法。
抽象類中可定義抽象方法,同時也可以定義非抽象方法。
3,一般類可以被例項化。
抽象類不可以被例項化。
僱員示例:
需求:公司中程式設計師有姓名,工號,薪水,工作內容。
專案經理除了有姓名,工號,薪水,還有獎金,工作內容。
對給出需求進行資料建模。
分析:
在這個問題領域中,先找出涉及的物件。
通過名詞提煉法。
程式設計師:
屬性:姓名,工號,薪水、
行為:工作。
經理:
屬性:姓名,工號,薪水,獎金。
行為:工作。
程式設計師和經理不存在著直接繼承關係,
但是程式設計師和經理卻具有共性內容。
可以進行抽取。因為他們都是公司的僱員
可以將程式設計師和經理進行抽取.建立體系.
// 僱員
abstract class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name=name;
this.id=id;
this.pay=pay;
}
public abstract void work();
}
// 程式設計師
class Programmer extends Emploryee
{
Programmer(String name,String id, double pay)
{
suprt(name,id,pay);
}
public void work()
{
System.out.println("code..");
}
}
//經理
class Manager extends Employee
{
private int bonus;
Manager(String name,String id ,double pay,int bonus)
{
super(name,id,pay);
this.bonus=bonus;
}
public void work()
{
System.out.println("manager");
}
}
class AbstractDemo
{
public static void main (String [] args)
{
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return name;
}
public String setName()
{
this.name=name;
}
}
class Student extends Person
{
Student (String name,int age)
{
super(name,age);
}
}
5,抽象類一定是個父類嗎?
是的。因為需要子類覆蓋其方法後才可以對子類例項化