抽象类(简单描述)

使用一个通俗且易理解的方法来讲纯虚类,假设有鸟类,该类有个属性是鸟会飞,企鹅也属于鸟类,但企鹅不会飞,那我们不想在企鹅内部继承与飞相关的属性。在比如圆和椭圆,在数学定义中圆是属于特殊的椭圆,若我们按照定义去取椭圆为基类,会发现有很多不需要的点,比如椭圆存在长轴,短轴,同时椭圆旋转角度不一样,它的形状便不一样,这些对于圆来说都是不需要的,因此简单的将圆继承于椭圆显然不合适,因此便发明了抽象类。抽象类的申明,首先依靠于纯虚函数,virtual void food() = 0;  便为纯虚函数,即在虚函数申明之后再在虚函数后面添加一个=0。抽象类只能作为基类,同时纯虚函数可以只申明而不定义(正式因为此,所以拥有存虚函数的类只可以当基类),当编程时,对于椭圆和圆相同的部分,我们可以创建保护函数来继承(比如圆心坐标的平移),但对于不相同的地方,我们便可以采用纯虚类的方式加以区分(比如面积的计算)。

以下给出抽象类的一个简单例子:

class animal
{
public:
	void sleep() { cout << "趴着睡觉" << endl; }
	// 使虚函数等于0便创建了纯虚函数(纯虚函数可以只申明不定义),有纯虚函数的类便称为抽象类,注意纯虚函数只能放在基类里面,因此抽象类都是基类
	// 抽象类可以不定义对象
	virtual void food() = 0; 
};
class tiger :public animal
{
public:
	virtual void food() { cout << "Tiger food is meat.\n"; }
};
class cow :public animal
{
public:
	virtual void food() { cout << "cow food is gross.\n"; }
};
int main()
{
	tiger ti;
	ti.sleep();
	ti.food();

	cow co;
	co.sleep();
	co.food();
}

更详细的抽象类知识,请参照《c++primer plus》第508页。注意:抽象类,可以只定义接口,而不涉及实现。并且抽象类不能用于创建对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽象类是Java的一种特殊类,它不能被实例化,只能作为其他类的基类或父类来被继承。抽象类的主要目的是为了提供一种通用的抽象模板,定义了一些方法的签名(包括方法名、参数和返回类型),但没有具体的实现。子类继承抽象类后,必须实现抽象方法,才能创建子类的实例。 在Java,我们使用`abstract`关键字来声明一个抽象类抽象类可以包含普通方法成员变量和构造方法,但不能包含私有的构造方法抽象方法用`abstract`关键字来声明,并且不提供具体的实现。子类必须实现父类的所有抽象方法,否则子类也必须声明抽象类。 下面是一个简单抽象类的示例: ```java abstract class Shape { protected String color; public Shape(String color) { this.color = color; } public abstract double getArea(); } class Circle extends Shape { private double radius; public Circle(double radius, String color) { super(color); this.radius = radius; } @Override public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { private double side; public Square(double side, String color) { super(color); this.side = side; } @Override public double getArea() { return side * side; } } ``` 在上面的示例,`Shape`类是一个抽象类,它有一个抽象方法`getArea()`,并且包含一个成员变量`color`和一个构造方法。`Circle`和`Square`类继承自`Shape`类,并实现了抽象方法`getArea()`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值