java 抽象类命名_Java的抽象类和接口

一.抽象类

首先看抽象方法:抽象方法只有方法签名,没有方法的实现。并且被abstract修饰。 例如:  abstract void test();

有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。

抽象类的规则:

抽象类必须使用abstract修饰符来修饰。

抽象类不能被实例化,无法使用new关键字来创建实例,即使抽象类中没有抽象方法,也不可以创建实例。只能当做父类被其他子类继承。

抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器(不能用于创建实例,主要是被子类调用)、初始化块、内部类(接口、枚举)5种成分。

含有抽象方法的类。(直接定义了一个抽象方法;或者继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或者实现了一个接口,但没有完全实现接口包含的抽象方法)这三种情况,只能被定义成抽象类。

当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写),因此abstract方法不能定义为private访问权限(用public和protected修饰),即private和abstract不能同时修饰方法。而final修饰的类不能被继承,final修饰的方法不能被重写。因此,final和abstract永远不能同时使用。

static和abstract不能同时修改某个方法,即没有所谓的类抽象方法。

抽象类的作用:

作为子类的模板,从而避免了子类设计的随意性。抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为。

二. 接口

基本语法如下:

[修饰符] interface 接口名 extends 父接口1, 父接口2...

{

零到多个常量定义... (因为接口是一种规范,不能包含构造器和初始化块定义。只能是静态常量。)

零到多个抽象方法定义...

零到多个内部类、内部接口、内部枚举定义...

零到多个默认方法或类方法定义... (只有在java8以上版本才允许)

}

说明:

修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符,即只有在相同包结构下可以访问该接口。

接口名应该与类名采用相同的命名规则。合法的标识符,并具有可读性,可以使用形容词。

一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。

注意:

接口中定义的是多个类共同的公共行为规范,因此接口里所有成员,包括常量、方法、内部类和内部枚举都是public访问权限。定义接口成员时,可以忽略访问控制修饰符,如果指定访问控制修饰符,则只能使用public访问控制修饰符。

对于接口里定义的静态常量而言,它们是接口相关的,因此系统会自动为这些成员变量增加static和final两个修饰符。也就是说,在接口中定义成员变量时,不管是否使用public static final修饰符,接口中的成员变量总是使用这三个修饰符修饰。而且接口中没有构造器和初始化块,因此接口里定义的成员变量只能在定义时指定默认值。

接口里定义的方法只能是抽象方法、类方法和默认方法,因此如果不是定义默认方法,系统将自动为普通方法增加abstract修饰符;定义接口里的普通方法时不管是否使用public abstract修饰符,接口里的普通方法总是使用public abstract来修饰。接口里的普通方法不能有方法实现(方法体);但类方法、默认方法都是必须有方法实现(方法体)。

接口里定义内部类、内部接口、内部枚举默认都采用public static两个修饰符,不管定义时是否指定这两个修饰符,系统都会自动使用public static对它们进行修饰。

Java8允许在接口中定义默认方法,默认方法必须使用default修饰,不能使用static修饰,无论程序是否指定,默认方法总是使用public修饰。需要使用接口的实现类的实例来调用。

Java8允许在接口中定义类方法,类方法必须使用static修饰,不能使用default修饰,无论程序是否指定,类方法总是使用public修饰。类方法可以直接使用接口来调用。

使用接口

接口不能创建实例,但是可以用于声明引用类型变量。当使用接口来声明引用类型变量时,这个引用类型变量必须引用到到其实现类的对象。用途如下:

1. 定义变量,也可以用于强制类型装换

2. 调用接口中定义的常量

3. 被其他类实现

一个类可以继承一个父类,但是可以实现一个或多个接口, 类实现接口的语法如下:

[修饰符] class 类名 extends 父类 implements 接口1, 接口2, ....

{

类体部分

}

一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里的所定义的全部抽象方法(也就是重写这些抽象方法);

否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义为抽象类。

抽象类和接口的比较:

相同之处:

1. 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。

2. 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

差别:

1. 接口里只能包含抽象方法、静态方法和默认方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。

2. 接口里只能定义静态常量,不能定义普通成员变量;抽象类里则既可以定义普通成员变量,也可以定义静态常量。

3. 接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让子类调用这些构造器来完成属于抽象类的初始化操做。

4. 接口里不能包含初始化块;但抽象类里完全可以包含初始化块。

5. 一个类最多只有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多接口,可以弥补Java单继承的不足。

接口作为系统与外界交互的窗口,接口体现的是一种规范。当在一个程序中使用接口,接口是多个模块间的耦合标准;当在多个应用程序之间使用接口时,接口是多个程序之间的通信标准。

抽象类作为系统中多个子类的共同父类,它体现的是一种模板式设计。

利用接口,面向接口编程,例如:简单工厂模式,命令模式。

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

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

相关文章

JSP、Servlet中get请求和post请求的区别总结

在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法。前两天看《Head First Servlets & JSP》看到其中讲关于Servlet中get请求和post请求的区别,现总结如下: 1:请求数据的大小不同。 因为get请求的数…

用java解决约瑟夫循环问题_Java采用循环链表结构求解约瑟夫问题

本文实例讲述了Java采用循环链表结构求解约瑟夫问题的方法。分享给大家供大家参考。具体分析如下:这是第一次java考试的试题,对于没看过链表的同学来说就不会做,现在回头看看,还真不难。约瑟夫问题:有n个人&#xff0c…

在ubuntu上搭建开发环境9---Ubuntu删除ibus出现的问题及解决

删除 ibus输入法:  sudo apt-get install ibus 我们会遇到下面的问题 Ubuntu 14.04 系统设置很多选项消失。 其实遇到这个问题的一个最主要的原因是之前执行过卸载ibus输入法的操作,所以为了避免这个问题请不要卸载ibus输入法,大家依然可以…

java制作图形界面数据库_java图形界面以及链接数据库

import java、awt、*;import java、awt、event、*;import javax、swing、*;import java、sql、*;public class NoteTextArea extends JFrame implements ActionListener{private JPanel jpnew JPanel();private JButton[] jb new JButton[4];private JComboBox box;private JT…

HDU 3951 (博弈) Coin Game

先考虑两种简单的情况: 如果先手能一次把硬币拿完,即 k > n ,那么先手胜如果每次只能拿一个硬币, 即 k 1 ,那么如果有奇数个硬币先手胜,如果有偶数个硬币后手胜。剩下的情况就是先手一次拿不完&#xf…

顺序表的插入与删除java_C++实现顺序表的常用操作(插入删出查找输出)

实现顺序表的插入,删除,查找,输出操作在C语言中经常用到。下面小编给大家整理实现代码,一起看下吧代码如下所示:#includeusing namespace std;#define MAXSIZE 15typedef int DataType;typedef struct{DataType data[M…

Android实例-手机安全卫士(三十六)-根据Service是否开启确定CheckBox选中状态

一、目标 1、根据service是否在后台运行情况来确定CheckBox的选中状态; 2、解决"设置中心"的“开启来电号码显示归属地”功能在退出程序再进入时选中状态消失,在任务管理器中关闭“来显”服务时,功能仍为选中状态 二、代码实现 1、…

把java复制到e_编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下...

package cn.io.file.demo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.FilenameFilter;import java.io.IOException;/*** 编写一个程序,将e:\java目录下…

HTTP - PUT 上传文件/Shell

今天遇到几个PUT上传的点,但是都没利用起来。一怒之下,在自己本地试了一下。步骤如下: 一、环境: 首先,根据 配置Apache服务器支持向目录PUT文件 更新一下httpd.conf文件,重启所有服务。 二、HTTP - PUT PU…

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件。如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供。我们将相关信息存储在一个intent中,例…

java实现手机开关机_Android 系统重启与关机:Java 代码实现

粘贴一篇关于权限的文章:最近在做个东西,巧合碰到了sharedUserId 的问题,所以收集了一些资料,存存档备份。安装在设备中的每一个apk文件,Android 给每个 APK 进程分配一个单独的用户空间,其 manifest 中的 userid 就是…

C# 泛型的协变和逆变

1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用。如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量。协变和逆变是两个相互对立的概念: 如果某个返回的…

java数据类型的站位_Java 数据类型在实际开发中应用

在前边的文章中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型。在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的对象(比如基本数据类型存在与…

块状元素的居中,首先设置宽度,再设 margin: 0 auto

块状元素的居中,首先设置宽度 width"10px",再设 margin: 0 auto; 。转载于:https://www.cnblogs.com/npk19195global/p/4475576.html

java amf3_Java AMF3 反序列化漏洞分析

写在前面的话AMF(Action Message Format)是一种二进制序列化格式,之前主要是Flash应用程序在使用这种格式。近期,Code White发现有多个Java AMF库中存在目前,漏洞相关信息已上报至美国CERT(详情请参考美国CERT VU#307983)概述目前&#xff0c…

typecho除了首页其他大部分网页404怎么办?

server {listen 80;server_name blog.localhost; #绑定域名index index.htm index.html index.php; #默认文件root /data/webroot/blog; #网站根目录location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi_params;}if (-f $request_filenam…

java能写复杂的查询么_spring-data-jpa 复杂查询的写法(包含or的查询)

场景如下:很简单的CMS常用查询,栏目下有多个子栏目,子栏目有包含内容。public class Channel{....private String parentIds;//所有的父节点,简化查询策略 例如 0,1,11,private List channels Lists.newArrayList(); //所有的儿子…

在Ubuntu上安装misterhouse

配置Ubuntu 您将对Ubuntu的配置做某些微小更改以便远程管理MH BOX和安装Misterhouse正常运行所需的必要的软件模块。首先要进行系统升级。因为系统提供的欧洲源更新实在是太慢了!更换源是为了节省时间,尽快得将系统更新一遍。安装完系统后这是重要的一个…

java+路径拦截实现_SpringBoot实现拦截器

首先,你的项目要能跑起来,且基于springboot的boot的拦截器不用配置web.xml,按照特定名字书写(后缀注解),它会自动识别(位置随便放,只要在代码目录下就可以)1.拦截器 SessionInterceptor.javapackage com.hfanss.blog.u…

Codeforces 524C Idempotent functions

题目链接:http://codeforces.com/problemset/problem/542/C 题目大意:给定一种运算f,对于输入的数组来说,一步操作,f(x) a[x],两步操作,f^2(x) a[a[x]]....倘若每次进行k步操作之后&#xff0…