Java声明定义抽象类/接口/继承/实现

文章目录

  • 声明定义抽象类
  • 声明定义接口
  • 派生类、抽象类、接口的继承要点

声明定义抽象类

public abstract class CRMSystem {public abstract Client add(Client newGuy); //添加用户方法public abstract Event add(Event e, Client guy); //重载添加事件、用户方法public abstract Event[] todayEvents(); //今日事件方法
}

说明:
1.抽象类有构造器
构造器的访问权限可以声明成public/protected/default,但是声明成public没有意义,因为抽象类并不能实例化,所以抽象类的构造器不能被其他类直接调用。即便是子类,子类中除了构造方法以外的方法也是不能调用抽象父类的构造方法的。所以抽象类的构造器只能在子类的构造器中被调用

2.接口和抽象类不能实例化
3.抽象方法所在的类必须是抽象类(接口是纯抽象类)
4.抽象类可以只有抽象方法,没具体方法
5.抽象类可以只有具体方法,没有抽象方法,这样设计的目的就是不让调用者创建该类的实例对象
6.抽象类的类体内容可以为空
7.抽象类中的抽象方法的访问权限修饰符可以是 publicprotecteddefault,但是不可以是 private。若没有指明访问权限修饰符,默认是default
8.抽象类中可以声明任意类型的变量,不论是静态的还是非静态的;不论是final的还是非final;不论是公开的还是私有的。
9.抽象类会将所有实现接口的所有未实现的抽象方法继承下来,换句话说接口会将所有未被实现的抽象方法继承到其抽象的实现子类中
10.abstract 不能与 final 同时修饰同一个类
11.abstract 不能与 private、static、final、native 同时修饰同一个方法
12.在抽象类中声明一个抽象方法,而该抽象类的父接口也含有相同方法签名的抽象方法,那么该抽象类中的该抽象方法就是覆盖重写父接口中对应的抽象方法,只是没有实现而已

应用场景:
抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。如果某个方法在父类中实现并没有任何意义,而是根据子类的实际需求来进行不同的实现,那么就可以将这个方法在父类中声明为 abstract 方法,那么这个父类也就成为 abstract 类了。

声明定义接口

public interface CRMSystem {Client add(Client newGuy);Event add(Event e, Client guy);Event[] todayEvents();// 默认方法,用来升级接口public default void myMethodDefault() {...}
}

说明:
1.接口中声明定义的变量,默认 public static final,而且必须是 public static final,其实就是常量,所以必须初始化(即赋值)
2.接口中声明定义的常量会被继承到实现子类中
3.接口中声明的抽象方法必须是 public abstract 的(默认,可以不写),并且不可以是 final,也不可以是 static
4.如果是 Java 8,还可以额外包含默认方法和静态方法,默认方法和静态方法都会被实现子类继承;其实私有方法也会被继承到子类中,只是看不到而已。因为子类对象中有保存父类私有方法的引用地址。

public default 返回值类型 方法名(参数列表) {方法体} // 默认方法,必须是public,默认是public,不可以加static,不可以加final
public static 返回值类型 方法名(参数列表) {方法体} // 静态方法,不可以是protected,默认是public,不可以加final

5.如果是 Java 9,还可以包含私用方法

private 返回值类型 方法名(参数列表) {方法体} // 私有的普通方法,可以加final
private static 返回值类型 方法名(参数列表) {方法体} // 私有的静态方法,不可以加final

6.不能通过实现子类的对象名称调用接口的静态方法,特别注意了。但是却可以通过实现子类的对象名称来访问接口的静态变量(实际上是常量)。因为编译时编译器会将实现子类的对象名称改成实现子类的类名,这样实际上还是通过实现子类的类名去访问静态变量的。
7.接口不可以有静态代码块和构造器
8.接口体的内容可以为空

派生类、抽象类、接口的继承要点

1.一个类(不论是具体类还是抽象类)只能继承自一个类(不论是具体类还是抽象类),不可以同时继承自多个类,换句话说一个类的直接父类只能有一个,这叫单继承
2.一个类可以多级继承,例如,A 继承自 B,B 继承自 C
3.一个类可以同时实现多个接口
4.一个父类可以有多个子类,即不同的类可以继承自同一个父类
5.接口可以继承自(extends)另外一个接口,也可以同时继承自多个接口
6.具体的子类如果继承自(extends)一个抽象类,则必须实现抽象类中的全部抽象方法
7.具体的实现子类如果实现自(implements)一个接口,则必须实现接口中的全部抽象方法
8.如果声明的是抽象类,继承自(extends)一个抽象类,则可以实现部分的抽象方法,甚至都不实现也行

9.如果声明的是抽象类,实现自(implements)一个接口,则可以实现部分的抽象方法,也可以都不实现,整个类体空的也可以;也可以实现全部的抽象方法,抽象类中可以没有抽象方法。

10.实现(implements)也是一种特殊的继承关系
11.父类,又叫基类、超类;子类,又叫派生类
12.实现抽象方法,也可以理解为重写(Override)方法
13.子类的成员方法无法直接访问父类的私域(private field)
14.一个具体的实现子类同时实现多个接口时,如果不同接口含有相同方法签名的默认方法,具体类必须重写冲突的默认方法
15.一个具体的实现子类同时实现多个接口时,如果不同接口含有相同方法签名的抽象方法,具体的实现子类只要实现其中一个抽象方法即可
16.一个具体的实现子类的直接父类和接口含有相同方法签名的方法时,通过具体的实现子类对象调此方法,优先使用直接父类的方法
17.子类无法继承父类的构造器
18.子类无法继承父类的私有变量和私有方法(实际已经继承了,只是不可见而已)
19.子类可以继承父类的静态变量和静态方法
20.子类可以继承父类的成员变量和成员方法
21.一个具体类继承自一个抽象类,必须实现抽象类中的全部抽象方法;这个具体类可以叫作抽象类的子类、派生类、实现类;而抽象类可以叫作该具体类的父类、基类、超类。
存疑:A 继承自 B,那么 B 能否叫作 A 的基类、超类呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cuba开发_使用CUBA进行开发–与Spring相比有很大的转变?

cuba开发阅读另一个供内部公司使用的Web项目的要求时,您(至少是我自己)通常会看到一个很普通的集合:定义明确的数据存储结构(或有时是现有的旧数据库),大量的数据输入形式,非常复杂的…

imagettftext php7,mac php7 imagettftext

Mac OS X 自带PHP环境gd库安装扩展freetype问题: “Call to undefined function imagettftext()”解决方法:curl -s [http://php-osx.liip.ch/install.sh](https://link.jianshu.com/?thttp://php-osx.liip.ch/install.sh) | bash -s 7.3sudo vim ~/.ba…

图片授权模式

RM、RF、PE是3种不同的图片授权模式,由图片卖家设定,图片买家根据自己的需要来进行选择。这三种模式是图片行业在发展过程中,经过对图片用户需求的不断总结而确定的。摄影师可以根据自己的销售意愿,在编辑图片的时候,对…

java线程池延期执行一次_Java使用者的延期执行

java线程池延期执行一次在前面的博客文章(“ 延迟执行Java的供应商 “),我引用礁HORSTMANN的陈述书中‘ 的Java SE8为真的很急关于lambda表达式’,‘所有的lambda表达式的点被推迟执行 。’ Horstmann在最后一年为Dobb博士的杂志写…

python时间序列数据分析,Python数据分析之时间序列

Python数据分析之时间序列发布时间:2020-07-10 06:56:27来源:51CTO阅读:808作者:up4ever1. 时间序列类型时间戳(timestramp)即特定的时刻固定时期(period)如2018年1月或2018年1月1日时间间隔(interval)由起始和结束时间戳表示2. P…

java jdk 序列化_JDK 11:Java序列化的终结开始了吗?

java jdk 序列化在博客文章“ 将Google的协议缓冲区与Java结合使用 ”中,我引用了乔什布洛赫(Josh Bloch)的第三版的有效Java ,他写道:“没有理由在您编写的任何新系统中使用Java序列化。” Bloch建议使用“跨平台结构…

php+ksort+返回true,PHP preg_replace函数

mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit] )在PHP中用来执行正则表达式的匹配以及替换的函数。可以返回一个正则表达式转换后的值。在subject中搜索pattern模式的匹配项,并用replacement模式进行替换。如果指定了 limit&…

下拉选择框

</select> 标签有一个属性 multiple&#xff0c;将其设置成 multiple"multiple" 按住 Ctrl 键即可实现多选。 请看例子&#xff1a; <html><head><meta http-equiv"Content-Type" content"text/html; charsetgb2312" />…

rest端点_REST:使用Controller端点?

rest端点在一般的REST架构中&#xff0c;基本概念是资源。 在资源之后&#xff0c;下一步是为这些资源开发一个统一接口&#xff0c;这在HTTP领域通常意味着&#xff1a; 创建为POST 阅读就是GET 更新为PUT&#xff08;或部分更新为PATCH&#xff09; 删除已删除 在现实世…

Java 字符串与整数之间的互相转换

1、如何将字符串String转化为整数int int i Integer.parseInt(str); int i Integer.valueOf(my_str).intValue(); 注: 字串转成Double, Float, Long的方法大同小异。 2、如何将字符串String转化为Integer Integer integerInteger.valueOf(i)3、如何将整数 int 转换成字串 Str…

hello world_建立无服务器的“ Hello World”功能

hello world无服务器 &#xff0c;功能即服务&#xff08;FaaS&#xff09;或仅具有云功能&#xff0c;就可以编写将在云中运行的代码。 您可以使用多种不同的语言&#xff08;例如JavaScript&#xff08;Node.js&#xff09;&#xff0c;Swift&#xff0c;Python&#xff0c;J…

xshell调出oracle安装界面,XShell+Xmanager实现在XShell中显示远程服务器的图形界面

你可以使用Xmanager软件&#xff0c;远程安装Oracle软件&#xff0c;Linux操作系统使用字符安装并不影响这种方式的使用。这个方案也可以大大优化你的Linux系统的性能&#xff0c;进而提高你的数据库性能。启动你的的Xmanager&#xff0c;我现在使用的是3.0版本&#xff0c;接收…

Oracle 数据库错误信息:动态执行表不可访问,本会话的自动统计被禁止

使用 PL/SQL 时, 每次第一次打开表的时候会提示以下信息&#xff1a; 动态执行表不可访问&#xff0c;本会话的自动统计被禁止&#xff0c;原因&#xff1a;V$SESSION,V$SESSTAT,V$STATNAME 没有被授权&#xff0c;没有权限访问这几张表&#xff0c;所以没有本法进行统计!那就…

jdk类加载器执行步骤_[JDK 11] jcmd中的类加载器层次结构详细信息

jdk类加载器执行步骤自从在JavaOne 2012上听说 jcmd以来&#xff0c;我就一直是命令行诊断工具jcmd的 粉丝 。 从那时起&#xff0c;我已经广泛使用了此工具&#xff0c;并多次在此博客中发布过此工具&#xff1a; jcmd&#xff1a;一个可以全部统治的JDK命令行工具 确定活动…

7445 oracle,Oracle 10g impdp 报 ORA-7445 [_INTEL_FAST_MEMCPY.A] 解决方法

在Oracle 10.2.0.4 以后的平台&#xff0c;我们在使用数据泵导入物化视图时&#xff0c;可能会遇到如下错误&#xff1a;...ksedmp: internal or fatal errorORA-7445: exception encountered: core dump [_intel_fast_memcpy.A()10][SIGSEGV] [Address not mapped to object] …

如何通过 PL/SQL Developer 将 Excel 数据导入 Oracle 对应的表中

首先将 Excel 文件另存为文本文件&#xff0c;然后在点击 PL/SQL Developer 菜单栏的【工具】-【文本导入器】&#xff0c;打开后如图所示&#xff1a; 上述步骤操作完之后&#xff0c;点击【到oracle的数据】&#xff1a;

kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST

kafka grpc机器学习/深度学习模型可以通过不同的方式进行预测。 我的首选方法是将分析模型直接部署到流处理应用程序&#xff08;如Kafka Streams或KSQL &#xff09;中。 您可以例如使用TensorFlow for Java API 。 这样可以实现最佳延迟和外部服务的独立性。 在我的Github项目…

Linux命令gitview,使用linux的gitview命令查看文件内容

使用linux的gitview命令查看文件内容发布时间&#xff1a;2020-07-22 10:23:42来源&#xff1a;亿速云阅读&#xff1a;99作者&#xff1a;清晨栏目&#xff1a;服务器这篇文章将为大家详细讲解有关使用linux的gitview命令查看文件内容&#xff0c;小编觉得挺实用的&#xff0c…

通过 PL/SQL Developer 建表

点击菜单栏的【文件】-【新建】-【表】&#xff0c;如下图所示&#xff1a;