本片随笔讲讲 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
来源: https://www.cnblogs.com/xym15079750872/p/10770477.html