课时82:抽象类的相关说明

简介: 课时82介绍了抽象类的相关说明,涵盖定义、概念、使用方法及静态方法的使用。抽象类是面向对象设计中的重要组成部分,不能被实例化,但可以包含普通方法和抽象方法。子类必须实现抽象方法,并可通过构造函数调用父类构造方法。抽象类中允许定义静态方法,这些方法不受实例化的限制,可以直接通过类名调用。

课时82:抽象类的相关说明

 

摘要:

1.抽象类的定义

2.抽象类的概念

3.抽象类的使用方法

4.抽象类中的 static 方法使用

 

01.抽象类的定义

 

抽象类在面向对象设计中占据重要地位,在使用抽象类时需要注意以下几点,在定义抽象类的时候,千万不要使用 Final 关键字进行定义,因为抽象类必须有子类,而  Final  定义的类是不能够有子类

final abstract class Message{ //定义抽象类
private string type; //消息类型
public abstract string getConnectInfo()://抽象方法
public void setrype(string type){ //普通方法
this.type=type ;
}
public string getType(){ //普通方法
return this.type ;
}
}
class DatabaseMessage extends Message { //类的继承关系
public string getConnectInfo(){//方法覆写
return "oracle数据库连接信息。";
}
}
public class JavaDemo {
public static void main(string args[]){
Message msg = new DatabaseMessage();

image.png  

 

02.抽象类的概念

 

抽象类是作为一个普通类的加强版出现的(抽象类的组成就是在普通类的基础上扩展而的,只是追加了抽象方法),那么普通类之中就可以定义属性和方法,那么这些属性一定是要求进行内存空间开辟的。抽象类不仅可以提供构造方法,并且子类也一定会按照子类对象的实例化原则进行父类构造调用。

final abstract class Message{ //定义抽象类
private string type; //消息类型
public Message(string type){ //类中没有提供有无参构造this.type  type;
}
public abstract string getConnectInfo()://抽象方法
public void setrype(string type){ //普通方法
this.type=type ;
}
public string getType(){ //普通方法
return this.type ;
}
}
class DatabaseMessage extends Message { //类的继承关系
public string getConnectInfo(){//方法覆写
return "oracle数据库连接信息。";
}
}
public class JavaDemo {
public static void main(string args[]){
Message msg = new DatabaseMessage();
msg.setType("客户消息");
System.out.println(msg.getConnectInfo());
System.out.println(msg.getType());
}
}

image.png

出现错误。它需要的是无参构造,但实际使用的是带有参数的构造,这表明需要明确调用的有参构造操作。

abstract class Message{ //定义抽象类
private string type; //消息类型
public Message(string type){ //类中没有提供有无参构造this.type  type;
}
public abstract string getConnectInfo()://抽象方法
public void setrype(string type){ //普通方法
this.type=type ;
}
public string getType(){ //普通方法
return this.type ;
}
}
class DatabaseMessage extends Message { //类的继承关系
public DatabaseMessage(string str){
super(str);
}
public string getConnectInfo(){//方法覆写
return "oracle数据库连接信息。";
}
}
public class JavaDemo {
public static void main(string args[]){
Message msg = new DatabaseMessage("客户消息");
System.out.println(msg.getConnectInfo());
System.out.println(msg.getType());
}
}

image.png

 

03.抽象类的使用方法

 

抽象类中允许没有抽象方法但是即便没有抽象方法,也无法直接使用关键字 New 直接实例化抽象类对象。

abstract class Message{ //定义抽象类
}
class DatabaseMessage extends Message { //类的继承关系
}
public class JavaDemo {
public static void main(string args[]){
Message msg = new Message();
}
}

image.png

Message 是抽象的,无法实例化,只要加上 abstract 是抽象类,并且永远无法实例化。只有通过子类才能获取抽象类的对象。

image.png

即使抽象类没有实例化对象,那么也无法直接使用关键字 New  获取抽象类的对象,必须通过子类对象来实现。

 

04.抽象类中的 static 方法使用

 

抽象类是可以提供 static 方法的,而且这些方法不受抽象类对象的局限。

abstract class Message{ //定义抽象类
Public abstract String getInfo()//抽象方法
public static Message getinstance(){
return new DatabaseMessage();
      }
}
class DatabaseMessage extends Message { //类的继承关系
publicString getInfo()
return"数据库连接信息。";
 }
}
public class JavaDemo {
public static void main(string args[]){
Message msg = Message.getinstance()
System.out.println(msg.getinfo());
}
}

Message 是抽象类对象,Static 方法不受对象实例化的限制。编译正常执行,可以完成。

image.png

接下来在大门中找到一个名为Message的实例,并接上Get Info进行操作。

Static  方法永远不受到实例化对象或结构的限制,永远可以直接通过类名称进行调用。这就是抽象类的相关说明,就是在普通类的上面新增特定功能,仅此而已。

 

相关文章
|
前端开发 JavaScript C++
揭秘Web前端CSS引入秘籍:Link vs @import,你的选择决定页面加载速度,你选对了吗?
【8月更文挑战第26天】本文探讨了Web前端开发中CSS的引用方法,主要包括行内样式、内部样式表及外部样式表三种形式。重点对比了外部样式表中的`<link>`和`@import`两种引入方式。`<link>`作为HTML元素,在页面加载初期就开始加载样式资源,支持并行加载,对提高页面加载速度有益。而`@import`作为一种CSS规则,仅能在CSS文件中使用,其引入的样式表会在页面完成加载后才开始加载,可能导致渲染延迟且不支持并行加载。因此,在多数情况下,推荐采用`<link>`方式引入外部样式表,以确保更佳的性能表现和浏览器兼容性。
308 2
|
存储 弹性计算 监控
【阿里云弹性计算】阿里云 ECS 性能优化秘籍:提升应用响应速度与资源利用率
【5月更文挑战第22天】阿里云ECS优化涉及实例规格选择、OS与应用配置、网络配置、存储优化及数据库连接池管理。合理挑选CPU和内存,关闭无关服务,利用EIP和负载均衡优化网络,选择合适存储类型,并通过监控工具进行性能分析和压力测试,以提升响应速度,优化资源利用率,降低成本,增强企业竞争力。示例展示了Java数据库连接池配置优化。通过持续探索和实践,可最大化发挥ECS潜力。
484 7
|
12月前
|
数据采集 Web App开发 JavaScript
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
本文介绍了如何使用Selenium爬虫技术抓取抖音评论,通过模拟鼠标悬停操作和结合代理IP、Cookie及User-Agent设置,有效应对动态内容加载和反爬机制。代码示例展示了具体实现步骤,帮助读者掌握这一实用技能。
539 0
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
|
存储 Java 关系型数据库
java: 无法访问org.springframework.context.ConfigurableApplicationContext
`亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。` `项目背景`:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。 `举例说明`:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。
329 11
|
IDE Java Linux
最简单IntelliJ IDEA安装教程(小白也能一次性安装完成)
最简单IntelliJ IDEA安装教程(小白也能一次性安装完成)
|
Java 数据库连接 API
seata回滚问题之全局异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
1888 108
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的培训与发展管理
【7月更文挑战第25天】 ERP系统中的培训与发展管理
755 2
|
机器学习/深度学习 人工智能 供应链
智能制造:AI驱动的生产革命——探索生产线优化、质量控制与供应链管理的新纪元
【7月更文第19天】随着第四次工业革命的浪潮席卷全球,人工智能(AI)正逐步成为推动制造业转型升级的核心力量。从生产线的智能化改造到质量控制的精密化管理,再到供应链的全局优化,AI技术以其强大的数据处理能力和深度学习算法,为企业开启了全新的生产效率和质量标准。本文将深入探讨AI在智能制造中的三大关键领域——生产线优化、质量控制、供应链管理中的应用与影响,并通过具体案例和代码示例加以阐述。
1494 3
|
SQL Java 数据库
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
|
存储 安全 Java
Spring Security实现基于数据库实现认证
本文档介绍了如何在Spring Security框架中基于数据库实现用户认证。首先,Spring Security提供了一个`UserDetailsService`接口,用于获取用户详细信息,通常在用户尝试登录时被调用。
262 5