上周考试错题类型总结(接口型)

简介: 上周考试错题类型总结(接口型)

简介:接口(interface),在java当中是一个抽象方法的集合体,一个类通常通过来继承接口,从而实现接口当中所有的实现类

接口跟类,并不相同,是两个不同的概念,接口的实现往往需要借助于实现类,从而达成目的,在实现的时候,除非是一个抽象的类,否则

就要对于接口当中的所有方法,进行重新的定义.而类只是用来描述对象的属性以及相应的方法

1>接口与类的区别:

一:   接口通常都是不能实例化的,要想进行实现,就需要有实现接口的存在,实现类的存在, 重新定义接口当中所有的方法

二:   接口是没有构造方法的

三:   接口当中所有的方法都只能是抽象的方法:在抽象方法的基础上,前面的public abstract都已经被隐藏,省略,所以我们可以直接构造 void+

相应的方法名称即可;

 注!:在java1.8当中,接口被设计的可以进行构造默认方法,以及静态默认方法(原因:有时候需要对于接口进行更新换代,进行升级,但是如果在接口当中再次

      构建一个新的抽象方法,那么之后接口的实现类都要进行对于这个方法的重写,比较麻烦,我们选择可以直接在这个接口内部直接构建这个更新过后的方法,能够被

      直接的调用,这就是默认方法,以及静态方法的创造原因){

   1.默认方法(默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法)
 public interface Vehicle {
       default void print(){
          System.out.println("奥力给,干了兄弟们!");
           }
        }
默认方法当中的一些冲突:存在有两个不同的接口,但是这两个接口当中都有相同的默认方法,连带名称都一样
   for example:
    1:
    public interface Vehicle {
       default void print(){
          System.out.println("我是一辆车!");
       }
    }
  public interface Accent {
       default void print(){
          System.out.println("我是一辆大卡车!");
       }
    }

   方法1:如果要进行调用,我们可以自己构建一个方法,实现其中我们要进行使用的具体方法,对其进行重写

 public vehicle implacements Vehicle {
        public static void print(){
        super();//在这里会自动的调用,所以是可以直接的省略
        System.out.println("我才不是车!");
    }
    }

 方法2:第二种,我们也可以都进行继承,最后选择相应自己需要的进行调用:

   (在接口当中,是允许有一个子类都进行实现多个不同的接口的)

    Vehicle.draw();就可以直接进行调用,不再进行重写    
    public interface Vehicle {
           default void print(){
              System.out.println("我是一辆车!");
           }
        static void draw(){
        System.out.println("我天生喜欢美的东西");
        }

            }
        

        }

四:接口当中不能定义成员变量(除了 static 以及 final类型的)

五:接口并不是要被继承,而是将要被"实现"

六:接口是支持多继承的(一个儿子爹只能有一个(继承只能一对一),但是干爹可以有好多个(干爹指的就是接口))

2>接口特性:

1.接口当中的方法都是一个隐藏的抽象方法,在方法名称前面隐藏了 public abstract 所以规定方法的时候,直接

用void+方法名();就可以

2.接口当中可以存在有变量,成员变量也可以有,但是都已经在前面隐藏了,public static final 变量

3.接口当中的类在接口当中无法进行实现,只能够通过实现接口的类来进行重写(java8的默认方法以及静态方法除外,以及java9的一些新加特性)

3>抽象类和接口类的不同之处:

1. 抽象类中的方法可以有方法体,就是能实现方法的"具体功能"但是接口中的方法不行。

(方法体就是在大括号当中加入一些java的具体代码块, 进行对于代码的实现, 接口当中定义的抽象方法必须要外部的实现类全部都进行重写才行)

2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。(并且在接口当中是进行隐藏的)

3. 接口中不能含有            ""静态代码块""        以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。

tips:静态代码块(随着类的加载而进行,并且只执行一次,之后进入回收站!)

是什么?

静态代码块:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便""销毁"",它仅能初始化类变量,即static修饰的数据成员。

 

static{
    }

   ***意义就是不需要每一次的调用都给其进行初始化


同时,还存在有非静态代码块:

   {


   }

   ***在每一次创建对象的时候都会被调用一次



如何用?

   在静态代码块的中间加入需要写的代码即可


4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

5.抽象类当中可以有构造方法, 但是接口当中是不可以存在构造方法的

(因为接口本身就是用来声明一种行为规范的, 按照定制的方法, 你需要对其进行执行, 不执行, 就是错误! "构造方法"    是用来在对象初始化前对对象进行一些预处理的,提供了实例化一个具体东西的入口。接口只是声明而已,不一定要进行什么初始化,就算要进行初始化,也可以到实现接口的那一些类里面去初始化。)


}


相关文章
|
3天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
14天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1301 5
|
13天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1327 87
|
2天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
181 82
2025年阿里云域名备案流程(新手图文详细流程)
|
7天前
|
前端开发
Promise的then方法返回的新Promise对象的状态为“失败(Rejected)”时,链式调用会如何执行?
Promise的then方法返回的新Promise对象的状态为“失败(Rejected)”时,链式调用会如何执行?
242 127