JAVA知识基础(六):抽象

1.概述

抽象类、抽象方法以及接口,这三个知识点是每个程序员必备的基础,无论是在实际编程的时候,还是在面试的时候,都会出现这类问题,面试官很可能就会问你,interface和abstract的区别

当父类知道子类应该包含什么样的方法,但无法确定子类如何实现这些方法;在分析事物时,会发现事物的共性,将共性抽取出,实现的时候,就会有这样的情况:方法功能声明相同,但方法功能主体不同,这时,将方法声明抽取出,那么,此方法就是一个抽象方法。

2.抽象类小结

  1. 抽象类和抽象方法都必须用abstract修饰符来修饰,抽象方法不能有方法体
  2. 抽象类有构造器,但不能直接被实例化,要创建对象涉及向上转型,主要是用于被其子类调用
  3. 抽象类中可以没有抽象方法,但是有抽象方法的类必定是抽象类
  4. 抽象类中可以包含静态方法
  5. 抽象类不能用final修饰
  6. 抽象类不能用private修饰
  7. 抽象类也是类,一样是用来继承的,接口与类才是实现关系
  8. 外部抽象类不能用Static修饰,但内部的抽象类可以使用static声明
  9. 抽象类可以继承抽象类,抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体非抽象派生类必须覆盖它们
  10. 抽象类可以实现接口,可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

3.抽象类组成分析

普通类可以包含构造方法、普通方法、static方法、常量和变量等内容。而抽象类也是类,而且是一个特别的类,抽象类是指在普通类的结构里面选择性的增加抽象方法并以abstract关键字将该类修饰,是的,每个抽象类不管有没有抽象方法在其类结构中,abstract关键字非加不可。

1、抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。
2、抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。
3、抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。
4、抽象类的构造器不能用于创建实例,主要是用于被其子类调用。
5、抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
6、abstract static不能同时修饰一个方法 (abstract方法没有方法体不能直接调用,static方法可以直接调用,冲突)

4.不能共存的关键字

不能与抽象类(abstract)共存的关键字主要有三个,分别是final、private、static

1、final
final:抽象类不能用final修饰。因为抽象类一定要被abstract修饰,而且抽象类一定要被继承否则该抽象类无意义。而被final修饰的类不能被继承,也就是说不能有子类,所以二者冲突不能同时使用!

2、private
private: 抽象类不能用private修饰,只能用public或protected。首先要明确一点:被abstract修饰的类是为了让非抽象子类看到并强制重写。如果抽象类中有私有的抽象方法,那么该抽象方法不被子类所知,就无法被复写。 而抽象方法出现的就是需要被复写。

3、static
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。众所周知,抽象方法是没有方法体的,可见运行也就没意义了。虽然外部抽象类不能用Static修饰,但内部的抽象类却可以使用static声明

//定义一个抽象类A
abstract class A{//定义一个内部抽象类Bstatic abstract class B{  //static定义的内部类属于外部类public abstract void saoMethod();}
}
class C extends A.B{public void saoMethod(){System.out.println("======saoMethod方法执行了======");}
}
public class StaticDemo {public static void main(String[] args) {A.B ab = new C();//向上转型ab.saoMethod();}
}

运行结果: saoMethod方法执行了

说白了抽象类的功能就是一个类定义模板的功能。

5.关于接口(interface)

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。

接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

6.抽象类与接口的区别

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的可以有非抽象方法,比如deaflut方法
4.抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5.抽象类中可以包含静态方法,接口中不能包含静态方法
6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7.一个类可以实现多个接口,但只能继承一个抽象类。

注意
有抽象方法不一定是抽象类,也可能是接口。抽象类不一定有抽象方法,可以有非抽象的普通方法。

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

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

相关文章

MIP开发教程(三) 使用MIP-CLI工具调试组件

一 . 在 mip-extensions 仓库中创建新的组件二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发的非通用组件,使用 组件上线平台 提交,上线后代码位于 GitHub/mip-extension-platform 仓…

JAVA知识基础(七):封装

1.概述 封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。 要访问该类的代码和数据,必须通过严格的接口控制…

MIP开发教程(二) 使用MIP-CLI工具调试MIP网页

初始化 MIP 配置 新建一个 MIP 网页 编写 MIP 网页代码 校验 MIP 网页 调试 MIP 网页 1. 初始化 MIP 配置 首先在html目录下进行初始化 MIP 配置: $ mip init 此时会创建mip.config文件: 2. 新建一个 MIP 网页 在mip-project/html文件夹下输入如下…

Nginx(五):动静分离

1、概念基础 Nginx动静分离简单来说就是把动态请求和静态请求分开,不能理解成只是单纯的把动态页面静态页面的物理分离。严格意义上说应该是动态请求跟静态请求的分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实…

Nginx(六):配置nginx高可用集群

我们知道在我们使用nginx代理多态tomcat服务器时,如果某台tomcat服务器发生宕机,那么nginx的分配机制可以自动将其剔除。但是如果发生了nginx的宕机状况,又该如何解决呢。 1、配置高可用的集群 1.1、什么是高可用 高可用HA(Hig…

MIP开发教程(一) MIP-CLI工具安装与环境部署

依赖安装 安装 MIP-CLI 创建开发文件结构 1. 依赖安装 MIP-CLI 使用 NPM 安装,依赖 node 环境: node 安装-windowsnode 安装-mac MIP-CLI 开发组件需要 git: git 安装-windowsgit 安装-mac 2. 安装 MIP-CLI MIP-CLI:mip 开…

JAVA知识基础(八):继承

1.概述 1.1、继承的由来 至于由来简单一句话:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为。 继承描述的是事物之间的所属关系,这种关系是 is-a 的关系。 1.2、继承的定义 …

MIP 2016年终总结

MIP 项目组成立至今已经有一年多的时间,在过去的一年里,感谢各位的关注。 1. MIP JS 迭代 MIP JS 运行环境是 MIP 页面和 MIP 组件运行的基石。在 2016 年 4 月,MIP JS 发布了 mipmain-v0.0.1.js, 随后经过多次迭代,在 2016 年 …

JAVA知识基础(九):this、super 关键字总结

1.this关键字 this有三种常见用法 1.this调用本类中的属性,也就是类中的成员变量 2.this调用本类中的其他方法 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行。 2.super关键字 在java里面,对于super关键字通常有两种用法 …

向MIP开源项目提交Issues

Issues 是 GitHub 管理需求,讨论技术方案的方式,附:官方解释。MIP 是在 GitHub 上的开源项目,也使用 Issues 来做任务管理。 一、Issues 在 MIP 项目中的应用 MIP 项目中的 Issues 主要有两种用法: 1. * 记录 bug,…

Nginx(七):nginx原理解析

前面我们讲到了nginx的反向代理、负载均衡、动静分离以及高可用,本篇我们来了解一下nginx的原理,看一下nginx是怎么执行的。 1、mater和worker 2、worker是如何进行工作的 3、相关问题 3.1、一个 master 和多个 woker 有好处 (1&#xff0…

为什么MIP-Cache存在

在去年十月的一篇 博客文章 提到 MIP 加速器是由 MIP-HTML, MIP-JS 和 MIP-Cache 三个模块共同产生加速效果的。MIP-HTML 和 MIP-JS 都是开源的,在 GitHub 上可以访问。但 MIP-Cache 是百度提供的,所有从百度搜索结果页打开的页面都是 MIP-Cache 的页面。…

JAVA知识基础(十):多态

1.概述 1.1多态的定义 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 多态性是对象多种表现形式的体现。 1.2多态的优点 消除类型之间的耦合关系可替换性可扩充性接口性灵活性简化性 1.3多态存在的三个…

MIP技术交流分享(3月9日)

3月9日上周四下午,MIP 团队工程师与去哪儿酒店云、众荟的 Web 前端工程师进行了一次面对面的技术交流。 在这次交流中,MIP 工程师主要分享了 MIP 技术原理,MIP 加速原理,以及 MIP 为开发者提供的工具集。去哪儿的工程师也提出了通…

JAVA知识基础(十一):异常

1.异常的概念 简单说就是不正常运行,最终导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常指的并不是语法错误,语法错了,编译不…

SpringBoot基础篇(一):Spring Boot入门

我们今天开始对SpringBoot的学习,本篇主要是Spring Boot的入门部分。 1、SpringBoot简介 引用SpringBoot在百度百科中的含义: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使…

SpringBoot基础篇(二):HelloWorld细节探究

1、场景启动器 1.1依赖 <!--Hello World项目的父工程是org.springframework.boot--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</versio…

MIP 与 AMP 合作进展(3月7日)

“到目前为止&#xff0c;全网通过 MIP 校验的网页已超10亿。除了代码和缓存&#xff0c; MIP 还想做更多来改善用户体验移动页面。” 3月7日&#xff0c;MIP 项目负责人在首次 AMP CONF 上发言。 那么 MIP 和 AMP 的关系是什么呢&#xff1f; AMP 是一个开源性项目&#xff…

SpringBoot番外篇(一):使用Spring Initializer快速创建Spring Boot项目(IDEA版)

IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目&#xff1b; 选择我们需要的模块&#xff1b;向导会联网创建Spring Boot项目&#xff1b; ps:需要联网 1、创建新项目时选择Spring Initializ&#xff0c;选择好java版本&#xff0c;点击next。r 2、填写项…

开发教程(四) MIP组件平台使用说明

组件审核平台用于上传 MIP 组件。经过自动校验之后&#xff0c;提交审核&#xff0c;通过审核的组件会定时推送到线上&#xff0c;供网站使用。 平台地址&#xff1a;https://www.mipengine.org/platform/ 1. 使用说明 MIP 组件审核平台用于提交开发完成的组件&#xff0c;如…