Java接口、implements关键字、接口中抽象方法,默认方法,静态方法,私有方法,常量、final关键字

接口:

接口是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么

接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法

(JDK 9)。

接口的定义:
它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并

不是类,而是另外一种引用数据类型,它是多个类的公共规范。它不能创建对象,但是可以被实现类实现其功能。

java中引用数据类型有:
数组,类,接口。

实现:
类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements 关键字。

接口的多实现:
在继承中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口的,这叫做接口的多实现。并且,一个类能继承一个父类,同时实现多个接口,接口的多实现格式为:

class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {//这里的继承可选// 重写接口中抽象方法【必须】// 重写接口中默认方法【不重名时可选】
}

优先级的问题:
当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类就近选择执行父类的成员方法,父类优先于接口。

接口中抽象方法:
抽象方法:使用 abstract 关键字修饰,可以省略,没有方法体,该方法供子类实现使用。

// 1.定义接口的格式和定义类的格式相似,只是将关键字class换为interface即可:
// 接口源码文件还是.java文件,编译后还是.class文件,这点需要注意。
public interface InterFace{// 2,接口中可以定义不同的数据类型,java 9 中允许可以定义的内容有:常量、抽象方法、默认方法、静态方法、私有方法;java 8中允许可以定义的内容有:常量、抽象方法、默认方法、静态方法public abstract void say();//3.注意:接口中的抽象方法,修饰符必须是public abstract为固定写法,这里可以选择性的省略它们,但是不能更换为其它修饰关键字。// 接口的使用步骤,3-5:// 3.接口不能直接使用(自己使用自己),必须有一个实现类(类似继承中子类)来使用此接口,其格式为:public class 实现类的名称 implements 接口名称{}// 4.接口的实现类必须覆盖重写接口中所用的抽象方法// 5,创建实现类的实例对象,使用接口。
}
// 6.定义一个实现类UseInterface:
public class UseInterface implements InterFace{// 7.将接口中所有抽象方法覆盖重写,如果有落下抽象方法没有覆盖重写,那么自己就是抽象类了@Overridepublic void say(){// 8.自定义方法体:System.out.println("实现类中的say方法被调用了");};
}
// 9.实例化一个实现类的对象:
public class UseInterfaceObj{public static void main(String[] args){// 不能直接通过接口实例化对象,必须通过实现类来创建对象:// InterFace interface = new Interface();//报错,直接使用接口创建对象会报错UseInterface interfaceObj1 = new UseInterface();// 10.使用接口中的抽象方法:interfaceObj1.say();//实现类中的say方法被调用了}
}

接口中默认方法:
默认方法:使用 default 关键字修饰,不可省略,供子类调用或者子类重写。

// 1.java 8开始,接口中可以定义默认方法,其格式为:public default 返回值类型 方法名称(参数列表){方法体},接口中的默认方法可以解决接口升级问题。
public interface InterfaceDefault{// 定义一个抽象方法:public abstract void methodAbstract();// 4.新增一个抽象方法(将这个抽象方法修改为默认方法后,实现类将不再报错,),新增抽象方法后,之前的实现类会报错,因为实现类中要覆盖重写所有接口中的抽象方法;新增抽象方法后,实现类中没有覆盖重写新增的抽象方法,因此会报错。// public abstract void methodAbstract2();public default void methodDefault(){//默认方法需要将关键字abstract修改为default且public可省略,默认方法会被实现类继承下去。System.out.println("接口中默认发方法被调用了,但是实现类中并没有定义此方法,默认方法是可以继承的");};// 总结:接口的默认方法可以被实现类对象直接调用,接口的默认方法也可以被实现类覆盖重写,当覆盖重写后,
}
// 2.定义一个InterfaceDefault接口的实现类:UseInterfaceDefaultA:
public class UseInterfaceDefaultA implements InterfaceDefault{// 覆盖重写抽象方法@Overridepublic void methodAbstract(){System.out.println("实现类A:实现了抽象方法");} 
}
// 3.定义一个InterfaceDefault接口的实现类:UseInterfaceDefaultB:
public class UseInterfaceDefaultB implements InterfaceDefault{// 覆盖重写抽象方法@Overridepublic void methodAbstract(){System.out.println("实现类B:实现了抽象方法");} 
//    8.实现类覆盖重写接口中的默认方法:@Overridepublic void methodDefault(){// 实现类中覆盖重写接口中默认方法后,实现类的对象将调用覆盖重写后的方法System.out.println("接口中的默认方法被实现类覆盖重写了,并调用了重写后的方法");}
}
// 5.实例化实现类的对象:
public class UseInterfaceDefaultObj{public static void main(String[] args){UseInterfaceDefaultA objA = new UseInterfaceDefaultA(); //6.调用抽象方法,实际调用的是实现类中的方法objA.methodAbstract();//实现类A:实现了抽象方法// 7.调用接口中的默认方法:objA.methodDefault();//接口中默认发方法被调用了,但是实现类中并没有定义此方法,默认方法是可以继承的UseInterfaceDefaultB objB = new UseInterfaceDefaultB(); objB.methodAbstract();//实现类B:实现了抽象方法objB.methodDefault();//接口中的默认方法被实现类覆盖重写了,并调用了重写后的方法//当接口中默认的方法被实现类覆盖重写后,接口中的默认方法将不再被调用,而是通过被覆盖重写的实现类中的方法代替}
}

接口中静态方法:
静态方法:使用 static 关键字修饰,供接口直接调用。

public interface InterfaceStatic{// 1.java 8 中允许定义静态方法,其格式为:public static 返回值类型 方法名(){方法体},需要注意的是关键字是static和需要写方法体,如:public static void methodStatic(){System.out.println("接口中的静态方法执行了");}// 注意:接口中的静态方法不能直接通过实现类的对象来调用,其正确调用格式为:接口名.静态方法,也就是说,使用接口中的静态方法没必要创建实现类对象,同样适用非接口中静态方法。
}
// 2.定义一个接口的实现类(用于测试静态方法是否可以通过实现类对象调用,实际是无需实现类对象的):
public class InterfaceStaticClass implements InterfaceStatic{// 这里没有可覆盖重写的抽象方法,无需进行覆盖重写。
}
// 3.实例化一个实现类的对象:
public class InterfaceStaticClassObj{public static void main(String[] args){InterfaceStaticClass interfaceStaticMethodObj = new InterfaceStaticClass(); // interfaceStaticMethodObj.methodStatic();//报错,接口中的静态方法不能直接通过实现类对象调用,应通过接口名称.静态方法的格式调用,如:InterfaceStatic.methodStatic();//接口中的静态方法执行了}
}

接口中私有方法:
私有方法:使用 private 关键字修饰,供接口中的默认方法或者静态方法调用。

// 1.当接口中有大量重复代码需要抽离出来放到一个方法中时,并且仅想让接口中的方法可以访问到被抽离出来内容的方法,而实现类无法访问此方法,此时可以使用私有方法封装抽离内容,而私有方法是不可以被实现类访问到的。
// 2.私有方法分普通私有方法和静态私有方法,其定义格式分别如下:
// 普通私有方法:private 返回值类型 方法名(参数){方法体}
// 静态私有方法:private static 返回值类型 方法名(参数){方法体}
public interface InterfacePrivateMethod{public default void method1(){System.out.println("接口中方法1执行了");commonMethod();}public default void method2(){System.out.println("接口中方法2执行了");commonMethod();}// 3.定义一个私有方法(里面可以装抽离出上面两个方法都需要的内容):private void commonMethod(){System.out.println("封装了公共代码的方法被执行了");}
}
// 4.定义一个接口的实现类:
public class InterfacePrivateMethodClass implements InterfacePrivateMethod{public void mes(){// commonMethod();//报错:在实现类中使用接口的私有方法会报错,实现类中可以访问接口中普通方法,如:method2();}
};
// 5.实例化一个对象对以上进行测试:
public class InterfacePrivateMethodClassObj{public static void main(String[] args){InterfacePrivateMethodClass InterPrivatMethod = new InterfacePrivateMethodClass();InterPrivatMethod.mes();//接口中方法2执行了// 封装了公共代码的方法被执行了// 可以看到私有方法在接口中执行了,无法在实现类中执行且报错了}
}

接口中的常量:
接口中,无法定义成员变量,但是可以定义常量;接口中,没有静态代码块。

// 定义一个接口:
public interface InterfaceConst{// 1.接口中也可以定义“成员变量”,但是必须使用public static final这三个关键字修饰(三个关键字可任意省略,但是其意义和没省略一样),其实是不可以变的变量,可以认为是常量;其定义格式:public static final 数据类型 常量名 = 值;final关键字表示不可变。public static final int NUM_SIX = 6;//一旦赋值,将不能被修改,通过接口名称.常量名可访问到常量的值// 注意:接口中的常量声明后必须赋值,否则会报错;常量名推荐使用完全大写英文字母且使用下划线分割
}
// 2.定义一个类,访问接口中的常量:
public class InterfaceConstObj{public static void main(String[] args){System.out.println(InterfaceConst.NUM_SIX);//6}
}

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度热力图颜色说明_大数据下的龙港、鳌江人口热力图

大数据下的龙港、鳌江人口热力图--趋势显示,人口逐步集中于区域中心地区与城市 2020-08-25 大数据(big data),是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。大数据有五大特点,即大量(Volume)、高速(Velocity)…

python 显示图片matplotlib_Python OpenCV ——Matplotlib显示图片

Color image loaded by OpenCV is in BGR mode.But Matplotlib displays in RGB mode.So color images will not be displayed correctly in Matplotlib if image is read with OpenCV.Please see the exercises for more details.(引自文档)import numpy as npimport cv2from …

什么是Spring?Spring是什么?

Spring概述: Spring是一个开源框架,是为了解决企业应用程序开发复杂性而开发的。 从简单性、可測试性和松耦合的角度而言,不论什么java应用都能够从Spring中受益。 简而言之,Spring就是一个轻量级的控制反转(IOC&#…

java中多态,instanceof关键字

多态: 面向对象三大特征:继承、封装、多态,其中多态指的是有多种形态,可以使代码更加灵活,而非状态。继承或接口是多态的前提,比如一个对象狗是宠物类的实现类对象,而宠物类又继承了动物类&…

python语言的单行注释以井号开头_【学习】Python语言入门

Python是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言。 语法 Python中没有强制的语句终止字符,且代码块是通过缩进来指示的。缩进表示一个代码…

python 参数个数 同名函数_Python——函数的参数

函数的参数定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,…

webview的

问题描述我给WEBVIEW加了等待的圆圈,怎么不起作用?布局文件:<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"android:lay…

java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)

final关键字&#xff1a; final表示最终的不可变的&#xff0c;在java中可以用来修饰类或方法、局部变量、成员变量。 // 1.final关键字修饰类需要放在class关键字前面&#xff0c;表示不可变的类&#xff0c;需要注意&#xff0c;这里表示当前类不能有子类&#xff0c;但是有…

python安装后无法使用_Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)...

在终端通过pip装好包以后&#xff0c;在pycharm中导入包时&#xff0c;依然会报错。新手不知道具体原因是什么&#xff0c;我把我的解决过程发出来&#xff0c;主要原因就是pip把包安装到了“解释器1”&#xff0c;但我们项目使用的是“解释器2”。我们新手怕字多&#xff0c;所…

03-sizeof的用法

1、作用 sizeof运算符是C语言特有的运算符。 用来计算一个变量或者一个常量、一种数据类型在内存中所占的字节数。 2、基本形式 (1) sizeof (变量或常量) (2) sizeof 变量或常量 (3) sizeof(数据类型) (4) 不能是sizeof 数据类型, 即计算数据类型的字节数必须用小括号括起来 实…

java中类作为成员变量类型使用、接口作为成员变量类型使用、接口作为方法的参数或返回值使用

类作为成员变量类型使用&#xff1a; 自定义的类也可以作为成员变量使用&#xff0c;如&#xff1a; // 1.创建一个电脑角色的类&#xff1a; public class Computer{private String computername;//定义电脑名称&#xff0c;String类型底层实际就是一个类&#xff0c;是java…

python django restful框架_python+django+rest框架配置创建方法

安装好所需要的插件和包&#xff1a;python、django、pip等版本如下&#xff1a;采用Django REST框架3.01、在python文件夹下D:\python\Lib\site-packages\django\bin打开cmd命令工具,本人将python文件夹名字改为了wwj,请注意:mkdir tutorialcd tutorialvirtualenv envsource e…

a标签获取input值_HTML5常用标签

一.HTML文档标签<!DOCTYPE>: 定义文档类型.<html>: 定义HTML文档.<head>: 定义文档的头部.(头部内包含)(1). <meta>: 定义元素可提供有关页面的元信息&#xff0c;比如针对搜索引擎和更新频度的描述和关键词. (2). <base>:定义页面上的所有链接规…

【Python3】POP3协议收邮件

初学Python3&#xff0c;做一个email的例子&#xff0c;虽然知道做的很渣渣&#xff0c;还是分享一下吧POP3协议POP3全称Post Official Protocol3&#xff0c;即邮局协议的第三个版本&#xff0c;它规定了怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议&…

发红包案例(RedPacketFrame简介)

发红包案例&#xff1a; 案例目录结构如下&#xff08;red包为第三方包&#xff0c;需要的话可以到网上自行下载或私信我邮箱即可&#xff09;&#xff1a; // 1.这里将借用发红包的框架&#xff1a;RedPacketFrame&#xff08;图形界面化&#xff09;&#xff0c;OpenMode处…

easy connect 获取服务端配置信息失败_如何统计 Mysql 服务器状态信息?

最近在看《高性能的 Mysql》一书&#xff0c;下面是关于如何学习统计 Mysql 服务器状态的学习总结&#xff0c;主要是学习使用 SHOW STATUS&#xff0c;SHOW ENGINE INNODB STATUS&#xff0c;SHOW PROCESSLIST&#xff0c;SHOW PROFILE 四个命令。命令一&#xff1a;SHOW STAT…

共聚焦图片怎么加标尺_科研教程|利用PS给电镜加标尺

一、开篇前言大家好&#xff0c;大飞鸽就是我&#xff0c;我就是大飞鸽。我们拍摄的SEM或者TEM上都会有放大倍数、加速电压、标尺、电镜信号、拍摄时间等信息&#xff0c;然而正常情况下我们需要的只有标尺这个信息。例如下方这个电镜图为SEM图片&#xff0c;图片下方包含了放大…

感觉又学到了不少,在这里写下来,但也有一个问题,不知道是为甚吗?

今天具体学习了如何去访问和修改HTML元素的内容与样式&#xff0c;也就是DOM中的节点 在这里有三种方法&#xff1a; 通过使用 getElementById() 方法通过使用 getElementsByTagName() 方法通过使用 getElementsByClassName() 方法• getElementById()方法&#xff1a;返回带有…

java中Object和Objects类、toString方法和equals方法介绍

Object类&#xff1a; Object类位于java.lang包中&#xff0c;lang包下的类无需导包就可以使用&#xff0c;object是Java语言中的根类&#xff0c;即所有类的父类。Object中描述的所有方法其子类都可以使用。在对象实例化的时候&#xff0c;最终找的父类就是Object。 如果一个…

实现线段切割法_切割晶圆及玻璃产品的现代技术与设备

作者&#xff1a;韩卓申科VS1,2&#xff0c;伊凡诺夫VI3&#xff0c;吕鸿图2,4&#xff0c;纳乌莫夫A S2,4&#xff0c;王薇媛4摘要&#xff1a;由于需以各种非金属半导体材料晶圆制造使用价值低之微电子产品&#xff0c;对其加工高精度及品质改善的要求更为严苛&#xff0c;因…