Java作业11抽象类

抽象类:从一个子类向父类追溯,类就会变得更通用、更加不明确。类的设计应该确保父类包含子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类。

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

运用要求:

C++

标准c++没有abstract关键字,代之使用纯虚类实现类似的功能。

在实现接口时,常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰。

Java

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是 public,abstract 类型的。

抽象类不能使用new操作符创建它的实例。抽象方法只有定义而没有实现。它的实现由子类提供。一个包含抽象方法的类必须声明为抽象类。

抽象类的构造方法定义为protected.

抽象类GeometricObject为几何对象定义了共同特征,并且提供了合适的构造方法。

运用意义:
在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。

Java

假设在问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时可以通过abstract class或者interface来定义一个表示该抽象概念的类型,定义方式分别如下所示:

使用abstract class方式定义Door:

abstractclassDoor{

abstractvoidopen(); 

abstractvoidclose();

}

使用interface方式定义Door:

interfaceDoor{

voidopen();

voidclose();

}

C++

为了让一个类成为抽象类,至少必须有一个纯虚函数。包含至少一个纯虚函数的类视为抽象类。

纯虚函数形式如下:

virtualreturntypefunction()=0;

例如,类A有两个纯虚函数lock()、unlock()和一个虚析构函数:

classA

{

public:

virtualvoidlock(void)=0;

virtualvoidunlock(void)=0;

virtual~A(void);

}

将函数lock()和unlock()初始化为0使它们成为纯虚函数,没有0这个初使化器,它们仅仅是虚函数。

classB:publicA

{

protected:

pthread_mutex_tx;

public:

B(void);

~B(void);

virtualvoidlock(void)

{

ead_mutex_lock(x);

}

virtualvoidunlock(void)

{

ead_mutex_unlock(x);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在给定的代码中,我们可以看到一个抽象类Vehicle和它的两个子类Car和RaceCar。每个类都有一个名为speed()的方法,返回不同的速度值。在TestCar类的main方法中,创建了一个RaceCar对象、一个Car对象和一个Vehicle对象,并通过调用speed()方法分别获取它们的速度值,并将结果打印输出。输出结果为"150, 60, 60"。 抽象类的意义在于它提供了一种定义接口的方式,它可以包含抽象方法和具体方法。抽象方法是没有实现的方法,需要在具体的子类中实现。抽象类可以作为基类,被其他类继承,并在子类中实现抽象方法。它可以提供一些公共的方法和属性,以及规范子类的行为。通过使用抽象类,我们可以实现代码的重用和扩展性的增强。 编写建设银行接口CCB继承银联接口,并实现该接口,可以在建设银行接口CCB中定义燃气费支付的方法,并在实现该接口的类中实现该方法。接口可以为不同的类提供一种共同的协议或契约,使得这些类可以按照接口中定义的方法进行操作。 正确的说法是接口定义了一组方法的规范,而抽象类可以包含方法的实现。接口可以被多个类实现,而抽象类只能被单继承。接口中的方法默认是公共的,而抽象类中的方法可以有不同的访问修饰符。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java入门第67课——抽象类和接口作业](https://blog.csdn.net/houjunkang363/article/details/90726776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值