java接口与抽象类
本片随笔讲讲java中接口与抽象类。
一,接口
1、什么是接口?
那在日常生活中接口是什么呢?就是两个对象之间进行连接的部分就是接口,就比如热水器与水管的接口一样,他可以确保不同的东西之间的顺利连接,就如不同的热水器厂家和水管厂家只要按照接口的标准来进行生产。那么热水器和水管就可以顺利连接了。而在java领域中接口是抽象类的一种,只包含常量和方法是定义,而没有变量和方法的实现,且其方法都是抽象方法。
1.1、具体表现:1、通过接口实现列的相同行为,不用考虑类之间的关系。
2、通过接口指明需要实现的方法。
2、接口的语法声明:
Xxx.java文件
package pkg2;
//定义类的接口,public后面加interface
public interface Xxx{
//方法 抽象方法必须是没有方法体,而不是方法体内没有代码。如下
public int a();
}
Xxxlmpl.java文件
package pkg2;
//Xxxlmpl.java文件名 连接 Xxx.java文件名
public class Xxxlmpl implements Xxx{
}
3.接口用法:用一道题目来讲解接口的用法,计算圆的周长,面积和体积。
第一步:我们先来写一个接口类的文件:Circle.java文件。
package pkg8;
public interface Circle{
//定义一个方法 类型用float 类接口不需要方法体 所以直接用分号。
//周长
public float getCircumference();
//面积
public float getArea();
//体积
public float getVolumeCube();
}
再写一个接口的实现类:Circlelmpl.java文件。
package pkg8;
public class CircleImp2 implements Circle2{
//定义用于表示圆周率的常量PI
private static final float PI = 3.14f;
//定义用于表示圆的半径
private float radius;
//构造方法用于传递参数。
public CircleImp2(float radius){
this.radius = radius;
}
//把接口类的需要求的周长,面积,体积实现 如果下:
//周长
public float getCircumference(){
//实现的代码
return 2 * PI * radius;
}
//面积
public float getArea(){
//实现的代码
return PI * radius * radius;
}
//体积
public float getVolumeCube(){
//实现的代码
return 4/3 * radius * radius * radius;
}
}
提示:implements 接口列表:可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。
最后来一个测试类:Test.java文件
package pkg8;
public class Test2{
public static void main(String args[]){
//写了构造方法,所以直接把值传过来即可。
//求半径为8.3的圆的周长,面积,体积。
Circle2 circle = new CircleImp2(8.3f);
System.out.println("周长是:"+circle.getCircumference()+" cm");
System.out.println("面积是:"+circle.getArea()+ " cm^2");
System.out.println("体积是:"+circle.getVolumeCube()+ " cm^3");
}
}
运行结果:

4、final关键字
上面代码中 出现了一个final关键字,那final关键字有上面作用呢

final关键字的作用代表的是不可变的,最终的意思,他可以修饰类,类的成员变量和成员方法。但是final作用不同
1、fina修饰成员变量:则成为常量 如:final double count;
2、final修饰成员方法:则该方法吧被子类重写。
3、final修饰类,则类是不能被继承的 如:
public final class Name{
.....
}
总结:
final关键字的用法共有四种:
- 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值。
- 用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
- 修饰方法,表示该方法无法被重写;
- 修饰类,表示该类无法被继承。
二、抽象类
抽象类的特点:
1、最大的特点就是模糊的。为什么说是模糊的呢?因为抽象类是不具体的,现实不存在的东西。
2、抽象方法 必须要有抽象类 (但抽象类中可以没有抽象方法) 否则程序会报错。例如:
package pkg9;
public class 周末{
public void 逛街(){
}
public void 看电影(){
}
//抽象类
public abstract void 结婚();
}
这里定义了一个周末的类 在里面有一个3个方法其中一个是抽象方法。
运行结果:

定义一个抽象类:

3、继承了抽象类,必须实现抽象类的所有抽象方法。
4、抽象类也可以继承抽象类,这样不需要实现父抽象类的方法。
接口和抽象类有什么区别?
1、接口中的所有方法都不需要实现(不允许有任何代码)。抽象类有些方法实现,有些方法没有实现。
2、接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则可以包含普通方法。
相关链接:https://juejin.im/post/57ce3612816dfa0054189a13
java接口与抽象类的更多相关文章
- java 接口和抽象类的区别
java 接口和抽象类的区别抽象类:1.含有抽象方法的类一定为抽象类,反过来抽象类,不一定含有抽象方法:2.抽象类必须用abstract来进行定义,抽象方法也必须用abstract来进行定义:3.抽象 ...
- 初探设计:Java接口和抽象类何时用?怎么用?
今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...
- Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类?
Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类? 2013-01-05 17:16:09| 分类: JAVA | 标签:java |举报|字号 订阅 下面比较一下两者的 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- java接口和抽象类
关于接口 1.创建一个接口,需要使用interface关键字. 2.实现一个接口,需要使用implements关键字. 3.接口的成员属性都是静态常量(默认public static final). ...
- java接口与抽象类的区别
接口可以是标志接口,里面没有任何常量和方法. 抽象类不一定必须有抽象方法,也可也没有方法,但含抽象方法的类必须被声明为抽象类. 在抽象层次结构中,Java接口在最上面,然后紧跟着抽象类,然后是一般类. ...
- Java接口和抽象类的实现方法
一.java中的接口本质上是加约束的抽象类 //抽象类 public abstract class AExample { public abstract int add(int x,int y); p ...
- Java 接口和抽象类差别
原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...
- Java接口和抽象类的理解
接口和抽象类的相同之处就是 都会有抽象方法 抽象方法就是一个没有方法体 等待继承的子类完成的方法 然而接口比较严格 它的方法必须是抽象方法且是公开的 抽象类 可以有自己的属性 和 实体方法 首相用面向 ...
随机推荐
- Django rest framework(7)----分页
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
- 通过jdbc完成单表的curd操作以及对JDBCUtils的封装
概述:jdbc是oracle公司制定的一套规范(一套接口),驱动是jdbc的实现类,由数据库厂商提供.所以我们可以通过一套规范实现对不同的数据库操作(多态) jdbc的作用:连接数据库,发送sql语句 ...
- Arduino初学
常见关键字 声明变量及接口名称(int val;int ledPin=13;) setup()--函数在程序开始时使用,可以初始化变量.接口模式.启用库等(例如:pinMode(ledPin,OUTU ...
- Python学习 Part3:数据结构
Python学习 Part3:数据结构 1. 深入列表: 所有的列表对象方法 list.append(x): 在列表的末尾添加一个元素 list.extend(L): 在列表的末尾添加一个指定列表的所 ...
- git merge与 git rebase区别及实例
接Git分支创建与合并,在分支合并时,有两种方式:git merge 和git rebase. git merge:将两个分支,合并提交为一个新提交,并且新提交有2个parent. git rebas ...
- 基于opencv3.0下的运动车辆识别
在opencv的初等应用上,对运动物体的识别主要有帧差或背景差两种方式. 帧差法主要的原理是当前帧与前一帧作差取绝对值: 背景差主要的原理是当前帧与背景帧作差取绝对值: 在识别运动车辆上主要需要以下9 ...
- 解决C语言程序报错:return type defaults to‘int’
下面是通过自定义一个函数printN,之后在main函数中调用printN,使得可以通过输入整数N,将从1到N的全部整数都打印出来的程序. 但是在编译过程中却报错: return type defau ...
- Springboot+JPA+Thymeleaf 校园博客完整小网站
本文所属[知识林]:http://www.zslin.com/web/article/detail/35 此项目是一个比较简易的校园博客.麻雀虽小五脏俱全,虽然是比较简易的但是涉及的知识点还是比较全面 ...
- Python爬取谷歌街景图片
最近有个需求是要爬取街景图片,国内厂商百度高德和腾讯地图都没有开放接口,查询资料得知谷歌地图开放街景api 谷歌捷径申请key地址:https://developers.google.com/maps ...
- Firefox Profile
win7环境下打开Firefox,跳出提示信息 "无法加载你的firefox配置文件 它可能已经丢失或无法访问" 解决方法: 1.按下WIN+R 调出运行,然后输入: firefo ...