2014-02-08 66 views
0

我已經真的努力了半個小時才明白這page,但它似乎我永遠不能理解他們輸入什麼,從它我不能真正找到基類之間的區別或摘要。如何使用抽象類

它不顯示如何使用它,但只顯示如何聲明它。我發現它和Base類的聲明是一樣的,就像沒有什麼區別。

有人能告訴我有用的抽象類的例子嗎?最好用C#代碼。女巫基地班不能做。

回答

3

抽象類根本不能被實例化(如在創建)。就這些。基類可以是。

抽象類用於幫助定義子類的結構,子類可以是將要創建的基類。

這使得抽象類可以更靈活一些。例如,抽象類中的函數可以是「虛擬函數」。這只是意味着它還沒有制定,沒有代碼。兒童班將必須做到這一點。不抽象的類不能具有「虛擬函數」,並且必須具有其所有函數的精確代碼。

+0

Nit:抽象類*可以(通常也是)也是基類。 – user2864740

+0

所以它仍然是線性的,它不能分叉? – MilitaryG

0

抽象類是類的「半實現」。它們可以通過一些通用功能部分實現,但將部分實現留給繼承類。你可以有一個名爲Animal的抽象類,它已經實現了一些通用的行爲/值,比如年齡,名字,SetAge(...).。你也可以有沒有實現的方法(它們是抽象的),很像接口。

接口只是指定應該可用於類的行爲的合約。你可以有一個像IWalker這樣的接口,需要公共方法Walk(),但沒有具體說明它是如何實現的。

源:What are some practical examples of abstract classes in java?

更多的例子:

0

抽象類主要用來提供給子類和子力共同功能有自己的實現抽象成員。它不能被初始化,所以單獨它不是一個對象,但在子類的行爲參與

public abstract void Import(Oasis OasisSource); 

如果你想要這個抽象類的所有兒童實行有自己Import功能,否則實現的功能基本的抽象類,將其標記爲虛擬,以便孩子可以在必要時重寫。

0

類可以被分爲3類

1. Class 
2. Abstract class 
3. Interface 
  1. 類只包含直接方法,即方法和它的主體還限定。類不支持多重繼承。
  2. 摘要既包含這種類型的身體較少的方法,我們需要通過繼承抽象類成基類來定義身體直接方法和抽象方法(即,沒有體的方法被稱爲抽象方法) ,和方法應當在被定義派生類。
  3. 接口僅包含抽象方法,並且應該在派生類上定義方法,如果基類還未定義方法體,那麼派生類也被視爲接口,最後這些方法應該在使用前定義。 接口支持多重繼承。

希望這可以幫助U,

0

這是一個沒有真正創建一個類來共享跨類的信息的一種方式。

如果你將永遠不會有一個需要特定的類實例化,但要提供一個可以供所有兒童使用成員和方法,使用抽象。

所以你的(子)類只會從抽象類繼承(擴展)。

考慮一下:

公司有員工

Some employees are engineers 
Some employees work executives 

所以,我們不希望員工有一個具體的(一個可以被實例化)類。讓我們創建一個摘要。

abstract class Employee 
{ 
    protected $employeeID=''; 
    protected $annualSalary=NULL; 
    abstract protected function setEmployeeID(); 
    abstract protected function setAnnualSalary(); 

    public function getEmployeeID() 
    { 
     return $this->employeeID; 
    } 

    public function getAnnualSalary() 
    { 
     return $this->annualSalaryID; 
    } 

} 


class Engineer extends Employee 
{ 
    protected function setEmployeeID() 
    { 
    //read from db, etc. 
    } 
    protected function setAnnualSalary() 
    { 
    //beg HR for a raise 
    } 
} 

class Executive extends Employee 
{ 
    protected function setEmployeeID() 
    { 
    //read from super-special db, etc. 
    } 
    protected function setAnnualSalary() 
    { 
    //definitely a large number 
    } 
}