首页 > 其他分享 >今天学习基础知识,抽象类和接口

今天学习基础知识,抽象类和接口

时间:2024-01-23 21:33:25浏览次数:20  
标签:func1 int void private 基础知识 接口 抽象类 public

今天学习基础知识,抽象类和接口,之前这块学的不太好没有太了解。

抽象类与接⼝

1. 抽象类

抽象类和抽象⽅法都使⽤ abstract 关键字进⾏声明。如果⼀个类中包含抽象⽅法,那么这个类必须声明

为抽象类。

抽象类和普通类最⼤的区别是,抽象类不能被实例化,只能被继承。

private InnerClass innerClass;

public AccessWithInnerClassExample() {

innerClass = new InnerClass();

}

public int getValue() {

return innerClass.x; // 直接访问

}

}

public abstract class AbstractClassExample {

protected int x;

private int y;

public abstract void func1();

public void func2() {

System.out.println("func2");

}

}

public class AbstractExtendClassExample extends AbstractClassExample {

@Override

public void func1() {

System.out.println("func1");

}

}

// AbstractClassExample ac1 = new AbstractClassExample(); //

'AbstractClassExample' is abstract; cannot be instantiated

AbstractClassExample ac2 = new AbstractExtendClassExample();

ac2.func1();

 

2. 接⼝

接⼝是抽象类的延伸,在 Java 8 之前,它可以看成是⼀个完全抽象的类,也就是说它不能有任何的⽅

法实现。

从 Java 8 开始,接⼝也可以拥有默认的⽅法实现,这是因为不⽀持默认⽅法的接⼝的维护成本太⾼

了。在 Java 8 之前,如果⼀个接⼝想要添加新的⽅法,那么要修改所有实现了该接⼝的类,让它们都

实现新增的⽅法。

接⼝的成员(字段 + ⽅法)默认都是 public 的,并且不允许定义为 private 或者 protected。从 Java 9

开始,允许将⽅法定义为 private,这样就能定义某些复⽤的代码⼜不会把⽅法暴露出去。

接⼝的字段默认都是 static 和 final 的。

 

public interface InterfaceExample {

void func1();

default void func2(){

System.out.println("func2");

}

int x = 123;

// int y; // Variable 'y' might not have been initialized

public int z = 0; // Modifier 'public' is redundant for interface

fields

// private int k = 0; // Modifier 'private' not allowed here

// protected int l = 0; // Modifier 'protected' not allowed here

// private void fun3(); // Modifier 'private' not allowed here

}

public class InterfaceImplementExample implements InterfaceExample {

@Override

public void func1() {

System.out.println("func1");

}

}

// InterfaceExample ie1 = new InterfaceExample(); // 'InterfaceExample' is

abstract; cannot be instantiated

InterfaceExample ie2 = new InterfaceImplementExample();

ie2.func1();

System.out.println(InterfaceExample.x);

3. ⽐较

从设计层⾯上看,抽象类提供了⼀种 IS-A 关系,需要满⾜⾥式替换原则,即⼦类对象必须能够替换

掉所有⽗类对象。⽽接⼝更像是⼀种 LIKE-A 关系,它只是提供⼀种⽅法实现契约,并不要求接⼝

和实现接⼝的类具有 IS-A 关系。

从使⽤上来看,⼀个类可以实现多个接⼝,但是不能继承多个抽象类。

接⼝的字段只能是 static 和 final 类型的,⽽抽象类的字段没有这种限制。

接⼝的成员只能是 public 的,⽽抽象类的成员可以有多种访问权限。

4. 使⽤选择

使⽤接⼝:

需要让不相关的类都实现⼀个⽅法,例如不相关的类都可以实现 Comparable 接⼝中的

compareTo() ⽅法;

需要使⽤多重继承。

使⽤抽象类:

需要在⼏个相关的类中共享代码。

需要能控制继承来的成员的访问权限,⽽不是都为 public。

需要继承⾮静态和⾮常量字段。

在很多情况下,接⼝优先于抽象类。因为接⼝没有抽象类严格的类层次结构要求,可以灵活地为⼀个类

添加⾏为。并且从 Java 8 开始,接⼝也可以有默认的⽅法实现,使得修改接⼝的成本也变的很低。

个人总结:看上十遍不如自己手写一遍,理解和记得清楚。

标签:func1,int,void,private,基础知识,接口,抽象类,public
From: https://www.cnblogs.com/cmx2012/p/17983453

相关文章

  • MeterSphere测试平台之使用接口测试
    用接口测试MeterSphere接口测试模块提供了接口定义、接口自动化等接口测试相关功能。用户可以使用树状多级模块来分级分组管理项目下的接口列表,创建执行接口用例测试接口,组合编排多个接口用例进行场景自动化测试。1接口定义管理¶进入【接口测试】->【接口定义】页面。......
  • 接口自动化框架设计漫谈V1.0
    你好,我是刚哥。针对“pytest搭建接口自动化框架”,谈谈对框架设计的当前认知。简约至上。选择pytest就是选择Python,Python的设计理念是Simpleisbetterthancomplex,不能让初学者直接上手的框架设计,都是在反其道而行之。所谓具备编程思想的自动化框架,并不值得追求。原生用法。B......
  • SpringBoot可视化接口开发工具magic-api
    magic-api简介magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象。在SpringBoot中使用1、添加magic-api相关依赖<!--接口快速开发框架 magic-api--><depen......
  • 免费节假日api接口使用教程-聚合数据
    免费节假日api接口使用教程-聚合数据......
  • SpringBoot实现RequestBodyAdvice和ResponseBodyAdvice接口
    SpringBoot提供了一种机制,允许开发者在请求体(RequestBody)和响应体(ResponseBody)被处理之前和之后执行自定义逻辑。这通过RequestBodyAdvice和ResponseBodyAdvice接口实现。RequestBodyAdvice:此类用于在请求体被处理之前执行自定义逻辑。例如,你可以使用它来解析请求体,或者......
  • .NET Framework 4 请求https接口
    usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Net;usingSystem.Text;usingSystem.Web;usingNewtonsoft.Json;namespaceTest.A{publicstaticclassHttpHelper{publicstaticTPostHttp......
  • CAN基础知识笔记
    CAN总线协议(ControllerAreaNetwork),控制器局域网总线,是德国BOSCH(博世)公司研发的一种串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN通讯是异步通讯,没有时钟信号线来保持信号接收同步,是半双工通信,无法同时发送与接收,在同一时刻,只能有一个节点......
  • 接口
    接口的本质就是契约作用:约束定义一些方法,让不同的人实现publicabstractpublicstaticfinal接口不能实例化,接口中没有构造方法implements可以实现多个接口必须重写接口中的方法//定义的关键字interface,接口都需要有实现类publicinterfaceUserServic......
  • STM32CubeMX教程22 FSMC - 8080并行接口TFT-LCD驱动
    1、准备材料开发板(正点原子stm32f407探索者开发板V2.4)STM32CubeMX软件(Version6.10.0)野火DAP仿真器keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板FSMC接口驱动8080并行接口TFT-LCD显示,具体为使用FSMCBank......
  • python接口测试-get请求
    用python做接口测试,需要了解和学习第三方模块:Requests。它是一个Python第三方库,处理URL资源特别方便。虽然Python内置的urllib模块,用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。可以查看requests中文官网:http://cn.python-requests.org/zh_CN/latest/inde......