Java超详细介绍抽象类与接口的使用

 更新时间:2022年05月10日 10:49:40   作者:xaiobit_hl  
在类中没有包含足够的信息来描绘一个具体的对象,这样的类称为抽象类,接口是Java中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成,本文给大家介绍Java抽象类和接口,感兴趣的朋友一起看看吧

1.抽象类的语法和特性

1.1语法

1.在Java中,一个类如果被abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。

// 抽象类:被abstract修饰的类
public abstract class Shape { 
    // 抽象方法:被abstract修饰的方法,没有方法体 
    abstract public void draw(); 
    abstract void calcArea(); 
    // 抽象类也是类,也可以增加普通方法和属性,也可以包含构造方法
    public double getArea() { 
        return area; 
    }
    protected double area; // 面积 
}

1.2特性

1. 抽象类不能直接实例化对象

Shape shape = new Shape(); 
// 编译出错 -> 抽象类不能被实例化

2. 抽象方法不能是 private 的

abstract class Shape { 
    abstract private void draw(); 
}
// 编译出错 -> 抽象方法不能用private修饰

注意:抽象方法没有加访问限定符时,默认是public.

3. 抽象方法不能被 final 和 static 修饰,因为抽象方法就是用来被子类重写的,两者是”天敌“;

public abstract class Shape { 
    abstract final void methodA(); 
    abstract public static void methodB(); 
}
// 编译报错: final和static修饰抽象方法,会出问题,二者属于”天敌“

4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要 使用 abstract 修饰

abstract class Shape {
    abstract void draw();
    abstract public void calcArea();
}
//1.实现抽象方法
class Cycle extends Shape {
    @Override
    void draw() {
        System.out.println("●");
    }
    @Override
    public void calcArea() {
        System.out.println("Π*r*r");
    }
}
//2.不实现抽象父类的抽象方法,但是将子类也定义为抽象类
abstract class Triangle extends Shape {
}

5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

2.接口的语法和使用

2.1语法

1.接口的定义格式与类的定义差不多,只要把class改成interface关键字即可。

public interface IOperation {
    public abstract void method1();
    public void method2();
    abstract void method3();
    void method4();
}

接口名的的注意事项:1.接口的命名一般以大写的 "I" 开头;2.接口的名字一般使用形容词性单词

推荐:阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性。

2.2特性

1.接口不能直接使用,必须要被一个类来 "实现",并且这个类要实现这个接口中的所有抽象方法

public interface IOperation {
    public abstract void method1();
    abstract void method2();
}
class A implements IOperation {
    //如果不重写接口中的抽象方法,代码在编译期间就会报错
    //如果不想重写,那么这个类一定是抽象类
    @Override
    public void method1() {
    }
    @Override
    public void method2() {
    }
}

2.接口与接口之间是继承(extends)关系,类与接口之间是实现关系(implements)关系

public interface IOperation {
}
class A implements IOperation {
}
interface Io extends IOperation {
}

3.接口类型是一种引用类型,不能实例化对象

4.接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)

public interface IOperation {
    private void method() {
    }
    //编译报错
}

5. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

public interface IOperation {
   void method();
   //编译报错:接口中的方法不能自己实现
   public abstract void A() {
   }
}

6. 重写接口中方法时,不能使用 default 访问权限修饰 7. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量,不能改变

interface IA{
    double a = 3.0; // 默认被:final public static修饰
}
public class TestDemo {
    public static void main(String[] args) {
        System.out.println(IA.a); // 可以直接通过接口名访问,说明是静态的
        //编译报错
        IA.a = 2.0; // 说明brand具有final属性
    }
}

8. 接口中不能有静态代码块和构造方法

interface USB {
    // 编译失败:接口中不能有构造方法
    public USB(){
    }
    {} // 编译失败:接口中不能有实例代码块
    void openDevice();
    void closeDevice();
}

到此这篇关于Java超详细介绍抽象类与接口的使用的文章就介绍到这了,更多相关Java抽象类与接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Controller层和Service层的类报错问题及解决方案

    关于Controller层和Service层的类报错问题及解决方案

    这篇文章主要介绍了关于Controller层和Service层的类报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java实现微信红包分配规则

    Java实现微信红包分配规则

    这篇文章主要为大家详细介绍了Java实现仿微信红包分配规则,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 浅析Java中局部变量与成员变量同名解决技巧

    浅析Java中局部变量与成员变量同名解决技巧

    在刚开始学习Java的时候,就了解了Java基础中的变量,虽然知道这个以后会经常用到,但没想到了基本语法这里,竟然又冒出来了成员变量和局部变量。变来变去太容易让人搞晕了,今天我们就挑拣出来梳理一下!
    2016-07-07
  • Java编程实现计算两个日期的月份差实例代码

    Java编程实现计算两个日期的月份差实例代码

    这篇文章主要介绍了Java编程实现计算两个日期的月份差实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 用Java实现简单画板功能

    用Java实现简单画板功能

    这篇文章主要为大家详细介绍了用Java实现简单画板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 解决配置Feign时报错PathVariable annotation was empty on param 0.

    解决配置Feign时报错PathVariable annotation was empty

    在配置Feign客户端时,如果遇到`@PathVariable`注解为空的问题,是因为在声明接口方法时没有为`@PathVariable`注解提供`value`属性,解决方法是为`@PathVariable`注解添加`value`属性,这样就可以避免报错,并成功启动Feign客户端
    2024-11-11
  • Idea 搭建Spring源码环境的超详细教程

    Idea 搭建Spring源码环境的超详细教程

    这篇文章主要介绍了Idea 搭建Spring源码环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java序列化和反序列化示例介绍

    Java序列化和反序列化示例介绍

    大家好,本篇文章主要讲的是Java序列化和反序列化示例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • java实现读取txt文件并以在每行以空格取数据

    java实现读取txt文件并以在每行以空格取数据

    今天小编就为大家分享一篇java实现读取txt文件并以在每行以空格取数据,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • java 抽象类与接口的区别总结

    java 抽象类与接口的区别总结

    这篇文章主要介绍了java 抽象类与接口的区别总结的相关资料,需要的朋友可以参考下
    2017-02-02

最新评论