Java-10接口与抽象类

抽象方法

abstract method机制

这是一个不完整的方法,它只有一个声明,没有方法体

abstract void f();

包含抽象方法的类被称为抽象类:如果一个类包含一个或多个抽象方法,则该类必须被定义为抽象类

public abstract class Basic {
/**
* 1、抽象类不能够被实例化
* 2、包含抽象方法的类称为抽象类
* 3、如果一个类包含一个或多个抽象方法,则该类必须被定义为抽象类
*/
abstract void unimplemented();
abstract void f();
}

抽象类不能够被实例化

public class AbstractTest {
public static void main(String[] args) {
// java: org.example.onjava.example10.abstract_class.Basic是抽象的; 无法实例化
// Basic basic = new Basic();
}
}

如果一个新类型继承了抽象类,并希望能生成自己的对象,那它必须为基类中的所有抽象方法提供方法定义,也就是说必须重写抽象类中所有抽象方法

public abstract class Basic {
/**
* 1、抽象类不能够被实例化
* 2、包含抽象方法的类称为抽象类
* 3、如果一个类包含一个或多个抽象方法,则该类必须被定义为抽象类
*/
public abstract void unimplemented();
public abstract void f();
}
public class Basic2 extends Basic {
// 【注意】继承抽象类后,需要为所有的抽象方法提供定义 @Override
public void unimplemented() {
System.out.println("Basic2.unimplemented");
}
@Override
public void f() {
System.out.println("Basic2.f");
}
}

一个抽象类可以不包含任何抽象方法。

如果一个类并不需要包含抽象方法,但同时还想阻止对它任何实例化,这时将其定义为抽象类就好了

public abstract class Basic3 {
int f(){
return 666;
}
// 没有抽象方法...... public static void main(String[] args) {
Basic3 basic3 = new Basic3();
//Basic3是抽象的; 无法实例化
}
}

接口

️接口中只允许有public 方法,默认的访问权限修饰符就是public

我们使用关键字interface来定义接口

接口如果不加上public关键字,将获得包访问权限,这样的话该接口就只能在同一个包内使用

public interface AnInterface {
/**
* "所有实现了这个特定接口的类看起来都像这样" -> 任何使用了特定接口的代码都知道可以为该接口调用哪些方法
* 接口是用来在类之间建立"协议"
* 接口通常暗示 "类的类型"
* 1、interface关键字创建了一个完全抽象的类,它不代表任何实现
* 2、接口描述了一个类应该是什么样子的和做什么的,而不是应该怎么做
* 3、它确定了方法名、参数列表和返回类型,但不提供方法主体
* 4、接口只提供一种形式,并且除了某些受限制的情况外,它通常不提供实现
*
*/
int method01();
void method02();
double method03();
boolean method04(int a, int b); }

接口也可以包含字段,但这些字段是隐式的static和final

要创建一个符合特定接口的类,使用implements【支持多实现】

/**
* @Author Coder_Pans
* @Date 2022/11/16 10:05
* @PackageName:org.example.onjava.example10.interface_demo.impl
* @ClassName: Implementation
* @Description: TODO Concept接口的实现类
* @Version 1.0
*/
public class Implementation implements Concept, AnInterface {// 实现多个接口用逗号隔开
@Override
public int method01() {
return Concept.i;// 接口中的字段:默认是static和final的
} @Override
public void method02() {
System.out.println("我实现了Concept接口......");
} @Override
public double method03() {
return 0;
}
@Override
public boolean method04(int a, int b) {
return a > b;
}
}

默认方法

当在接口中使用default时,default会允许方法创建一个方法体,实现了该接口的类可以在不定义方法[不实现该方法]的情况下直接替换方法体

/**
*
* 带有默认方法的接口
*/
public interface InterfaceWithDefault {
void firstMethod();
void secondMethod();
// 默认方法
default void newMethod(){
System.out.println("default会允许接口中的方法创建一个方法体," +
"实现了该接口的类可以在不定义方法的情况下直接替换方法体.!>?" +
"Java8之前不可以default" +
"实现类可以不实现default方法,但也可以直接调用");
}
}
/**
* @Author Coder_Pans
* @Date 2022/11/16 10:14
* @PackageName:org.example.onjava.example10.interface_demo.impl
* @ClassName: DefaultMethodImpl
* @Description: TODO 实现带有默认方法的接口
* @Version 1.0
*/
public class DefaultMethodImpl implements InterfaceWithDefault {
@Override
public void firstMethod() {
System.out.println("DefaultMethodImpl.firstMethod()");
} @Override
public void secondMethod() {
System.out.println("DefaultMethodImpl.secondMethod()");
}
// 该实现类没有实现InterfaceWithDefault中的default方法 public static void main(String[] args) {
DefaultMethodImpl defaultMethod = new DefaultMethodImpl();
defaultMethod.firstMethod();
defaultMethod.secondMethod();
defaultMethod.newMethod();// 没有实现也可以直接调用
}
}

️返回值类型不是方法签名的一部分,不能够用来区分两个方法

接口中的静态方法

定义模版方法(Template Method)

/**
* @Author Coder_Pans
* @Date 2022/11/16 10:22
* @PackageName:org.example.onjava.example10.interface_demo.interfaces
* @ClassName: Operation
* @Description: TODO 接口中 的 静态方法
* @Version 1.0
*/
public interface Operation {
void execute(); // 设计模式 -> 模版方法(Template Method)
// 根据需要传递任意数量的Operation参数,按顺序运行
static void runOps(Operation... ops){
for (Operation op : ops){
op.execute();
}
}
// 接口中 的 静态方法
static void show(String msg){
System.out.println(msg);
}
}

runOps()使用可变参数列表,可以根据需要传递任意数量的参数,并且顺序运行.....

/**
* @Author Coder_Pans
* @Date 2022/11/16 10:27
* @PackageName:org.example.onjava.example10.interface_demo.impl
* @ClassName: MetalWork
* @Description: TODO
* @Version 1.0
*/
class Heat implements Operation {
@Override
public void execute() {
Operation.show("Heat......");
}
}
public class MetalWork {
public static void main(String[] args) {
Operation twist = new Operation() {
@Override
public void execute() {
Operation.show("Twist......");
}
};
Operation.runOps(
new Heat(), // 常规类
new Operation() {// 匿名类
@Override
public void execute() {
Operation.show("Hammer......");
}
},
twist :: execute,// 方法引用
() -> Operation.show("Lambda......")// lambda表达式 );
}
}

抽象类和接口

二者之间的区别



抽象类仍然是一个类,在创建新类时只能继承它一个。而创建类的过程中可以实现 多个接口。【爱是抽象且唯一的!】

组合多个接口

需要将所 有的接口名称置于 implements 关键字之后且用逗号分隔。可以有任意多个接口,并可以向上转型为每个接口,因为每个接口都是独立的类型。

/**
* @Author Coder_Pans
* @Date 2022/11/16 10:44
* @PackageName:org.example.onjava.example10.interface_demo.impl
* @ClassName: Adventure
* @Description: TODO 组合多个接口,接口的多继承
* @Version 1.0
*/ public class Adventure {
public static void main(String[] args) { }
} /**
* 需要将所 有的接口名称置于 implements 关键字之后且用逗号分隔。
* 可以有任意多个接口,并可以向上转型为每个接口,因为每个接口都是独立的类型。
*/
class Hero extends D
implements A, B, C{ @Override
public void aMethod() { } @Override
public void bMethod() { } @Override
public void cMethod() { }
}
interface A{
void aMethod();
}
interface B{
void bMethod();
}
interface C{
void cMethod();
}
class D{
public void dMethod(){
System.out.println("dMethod......");
}
}

Java-10接口与抽象类的更多相关文章

  1. 深入理解Java的接口和抽象类(转)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  2. [转载]深入理解JAVA的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  3. 深入理解Java的接口和抽象类 _摘抄

    http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...

  4. 【转】深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  5. Java中接口和抽象类的比較

    Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计 ...

  6. 【转载】深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  7. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  8. Java进阶(三十六)深入理解Java的接口和抽象类

    Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...

  9. 33、深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  10. Java的接口和抽象类(转发:http://www.importnew.com/18780.html)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

随机推荐

  1. Mac10.13-10.15 下玩星际争霸1.16

    星际争霸DMG 存储在城通网盘,下载后挂载,复制到 应用程序 里就可以玩了 1, ctfile://xturlDG9QOlg_V29WOwI8UzEKZQdjUWEOOFJ7VCEHYFIxBzlTY ...

  2. maven处理jar包冲突

    一.起因 在使用maven构建项目的时候,偶尔会遇上类似如下错误: (1)java.io.IOException: invalid constant type: 15 (2)java.lang.NoS ...

  3. [2013年NOIP提高组] 积木大赛

    春春幼儿园举办了一年一度的"积木大赛".今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木 ...

  4. JavaWeb-动力节点

    目录 项目名 src |---- Servlet webapproot |------WEB-INF |------classes(存放字节码) |------lib(第三方jar包) |------ ...

  5. python + selenium 常用公共方法封装

    selenium 环境配置及浏览器驱动的安装:https://www.cnblogs.com/gancuimian/p/16435300.html uiautomator2 常用公共方法封装见之前的帖 ...

  6. 关于unity游戏的类名查找

    这里我用火影演示 首先我们知道,鸣人的决斗场技能代码为900010151,0251,0351,0451等等 我们进行搜索 然后再转到第二个进去(第一个为忍者技能的序列表) 注:序列表里的代码与那个他相 ...

  7. app内打开外部第三方瞎下载链接

    Q:我用cordova开发项目,想在app内跳转外部链接,安装了cordova-plugin-inappbrowser后确实可以跳转,但是跳转的页面有个按钮,原本点击会下载app,现在点击后毫无反应, ...

  8. MySQL Atlas 读写分离软件介绍

    MySQL Atlas介绍 目录 MySQL Atlas介绍 一.MySQL Atlas介绍 1.1.1 MySQL Atlas介绍 1.1.2 Atlas基本管理 一.MySQL Atlas介绍 1 ...

  9. 如何使用autotools/automake自动生成Makefile文件

    前言: Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Linux为我们提供了自动生成功能完善的Makefile文 ...

  10. loadrunner 11

    1  环境windows server 2012  2019 的.net 时, 服务器管理器--仪表板--勾选.net后报错? 其中一个办法就是将服务器临时联网,就能安装成功. 2   联机时 提示如 ...