首页 > 编程语言 >java接口学习笔记

java接口学习笔记

时间:2023-03-15 17:33:06浏览次数:47  
标签:java void jim 笔记 接口 抽象类 方法 public

目录

java接口学习笔记

1. 抽象类和抽象方法

抽象方法:abstract void f();

抽象类:包含抽象方法的类称为抽象类。如果一个方法包含一个或多个抽象方法,则该类必须被定义为抽象类,否则编译器会产生错误消息。

示例:

public abstract class Basic {
    abstract void unimplemented();
}

不允许使用private abstract修饰方法,因为这样不能提供一个方法定义。

允许方法定义(和抽象方法可以混合使用),允许非静态变量(在每个对象里都会被分配存储)。

抽象类的继承:继承抽象类的新类型,如果要生成自己的对象,则必须要为基类中的所有方法提供方法定义。否则,子类也是抽象的,编译器强制你使用abstract关键字来限定这个子类。

2. 接口

接口通常暗示“类的类型”或作为形容词来使用,例如Runnable或Serializable,而抽象类通常是类层次结构的一部分,并且是“事物的类型”,例如String。

abstract:默认不需要写,编译器会自动加上abstract,包括类和方法。

字段:

  • 隐式的staticfinal,可以用来创建一组常量值;
  • 不能是空白的final,但是可以用非常量表达式初始化,例如Random.nextInt()

@Override: 可以使用,防止意外重载。

默认方法:default关键字,实现该接口的类可以沿用。

JDK9+的版本中,接口里的staticdefault方法都可以是private的;

示例:

    default void jim(){
        System.out.println("jim2");
    }

接口的多重继承和多重实现:

  • 使用方法签名(方法名请和参数类型)来区分不同的方法,返回类型不是签名的一部分;
  • 当方法签名一致,但是内容不同的时候,必须重写冲突的方法(多重implements的时候处理方式相同);
  • 可以多重继承接口;
public interface Jim1 {
    void jim();
}
public interface Jim2 {
    default void jim(){
        System.out.println("jim2");
    }
}
public interface Jim3 extends Jim1,Jim2{
    @Override
    default void jim() {
        Jim1.super.jim();
    }
}
public class Jim implements Jim1,Jim2{
    @Override
    public void jim() {
        Jim2.super.jim();
    }
}

接口作为参数的价值在于可以让任何类都适应它

嵌套接口:参照《On Java基础卷》10.9

接口的private方法:始于JDK9,private方法可以省略default关键字,编译器会加上。

新特性:密封类和密封接口,始于JDK17,可以用来限制实现的类,主要用于Java模式匹配(JDK17新特性);

3. 抽象类和接口对比

特性 接口 抽象类
组合 可以在新类中组合多个接口 只能继承一个抽象类
状态 不能包含字段(静态字段除外,但他们不支持对象状态) 可以包含字段,非抽象方法可以引用这些字段
默认方法和抽象方法 默认方法不需要在子类型里实现,他只能引用接口里的方法(字段不行) 抽象放合法必须在子类型里实现
构造器 不能有构造器 可以有构造器
访问权限控制 隐式的public 可以为protected或包访问权限

参考

[1] 《On Java 基础卷》

标签:java,void,jim,笔记,接口,抽象类,方法,public
From: https://www.cnblogs.com/bloodcolding/p/17219349.html

相关文章

  • QT5笔记:7. 自定义类、自定义信号及类的元对象信息
    自定义的QPerson类,需要继承QObject类qperson.h头文件#ifndefQPERSON_H#defineQPERSON_H#include<QObject>classQPerson:publicQObject{Q_OBJECT......
  • 网络流学习笔记
    题单+1网络流一个有向图,每条边描述一个有向的限制条件,如果我们把它类比为水流的话,每条边就维护一个最大的水流量。一般有一个源点(可以流出无限多的水)和一个汇点(所有......
  • QT5笔记: 8. QT的全局变量(基本数据类型、函数、宏)
    这个头文件中存放着QT类库的一些全局定义,一般Qt类的头文件会包含这个头文件:基本数据类型函数宏数据类型:保证跨平台时各数据类型长度统一函数定义(一些数......
  • QT5笔记:9. QT的容器类
    QList中存放对象指针,QVector直接存放对象,所以访问性能更高QMap中key不可以重复,QMultiMap中key可以重复QMap在内存中顺序存储,QHash不是顺序存储的(hash算法是个映......
  • latex投稿笔记
     Latex投稿笔记Latex是一种专业的排版软件,被广泛应用于学术论文和科技文献的排版和编辑。在投稿学术论文时,使用Latex可以让论文更具有专业性和规范性。以下是一些关于La......
  • QT5笔记:5. QtCreator 的快捷键
    常用的快捷键:F4同名头文件和源文件之间切换F2声明和定义切换Ctrl+/注释F10\F11单步调试......
  • Java+Redis 通过Lua 完成库存扣减,创建消息队列,异步处理消息--实战
    需要完成功能借助redisStream数据结构实现消息队列,异步完成订单创建,其中涉及到了缓存(击穿,穿透,雪崩),锁(Redisson),并发处理,异步处理,Lua脚本IDE:IDEA2022 1、读取库存数......
  • java-返回值封装
    BaseResponse.Class@ApiIgnore@Data@JsonInclude(value=JsonInclude.Include.NON_NULL)@JsonIgnoreProperties(ignoreUnknown=true)publicclassBaseResponse<T>......
  • 【学习笔记】(10)块状链表
    块状链表(尚未完善)对于线性表,可以\(O(1)\)的访问,但是插入和删除操作是\(O(n)\)对于链表,可以\(O(1)\)的进行插入和删除,但是是\(O(n)\)的访问。于是本着分块的思想,......
  • https请求,Java代码忽略https证书:解决No subject alternative names present问题
    https请求,Java代码忽略https证书:解决Nosubjectalternativenamespresent问题packagecom.test.utils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;......