2014-02-08 64 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 
    } 
}