Java接口详解
Java接口详解
1、概述:
接口是多个类的公共规范;
代码语言:javascript代码运行次数:0运行复制接口是一种规范,实现某一接口就意味着遵循该接口的规范;
接口是一种引用类型;
代码语言:javascript代码运行次数:0运行复制引用类型:类、接口、数组;
接口最重要的内容是其中的抽象方法;
2、接口包含的内容
java7
①常量;
②抽象方法;
java8
③默认方法;
④静态方法;
java9
⑤私有方法;
1、接口抽象方法使用
注意
①接口中的抽象方法必有两个固定的修饰符,即public和abstract,所以可以省略;
②抽象方法的三要素可以随意定义;
接口抽象方法使用的步骤
①接口不能直接使用,必须有一个“实现类”来“实现”该接口;
②接口的实现类必须重写接口中的所有抽象方法(除非该实现类是抽象类);
③创建实现类的对象进行使用;
代码实现(抽象方法):
接口:
代码语言:javascript代码运行次数:0运行复制public interface myInterface {
public abstract void say();
public abstract void doSth();
public abstract void go();
public abstract void jump();
}
实现类:
代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface {
@Override
public void say() {
println("say方法");
}
@Override
public void doSth() {
println("doSth方法");
}
@Override
public void go() {
println("go方法");
}
@Override
public void jump() {
println("jump方法");
}
}
Test测试类:
代码语言:javascript代码运行次数:0运行复制public class Test {
public static void main(String[] args) {
MyInterfaceImpl myInterface = new MyInterfaceImpl();
myInterface.doSth();//doSth方法
myInterface.go();//go方法
myInterface.jump();//jump方法
myInterface.say();//say方法
}
}
自己产生的疑问:
接口的抽象实现类的子类是不是要实现接口和抽象实现类的所有方法,代码验证结果:是的!
、接口默认方法的使用
注意:
①默认方法不强制被重写,但可以被重写;
代码语言:javascript代码运行次数:0运行复制备注:
接口 ——> 抽象实现类 ——> 抽象实现类的子类
(下级重写了默认方法会将上级的覆盖掉)
②默认方法可以被实现类对象直接调用;
③public是固定修饰符,可以省略;
使用:
接口:
代码语言:javascript代码运行次数:0运行复制public interface myInterface {
public default void talk(){
println("talk默认方法");
}
}
实现类:
代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface {
//实现类可以重写默认方法,也可以不重写
@Override
public void talk() {
println("重写的默认方法");
}
}
Test测试方法:
代码语言:javascript代码运行次数:0运行复制public class Test {
public static void main(String[] args) {
MyInterfaceImpl myInterface = new MyInterfaceImpl();
();//重写的默认方法
}
}
4、接口静态方法的使用
注意:
①不能通过接口的实现类对象直接调用静态方法;
②通过接口名称调用接口内的静态方法;
③public可以省略;
④静态方法不能被实现类重写,也不用被实现类重写;
代码语言:javascript代码运行次数:0运行复制④静态方法不能被实现类重写,也不用被实现类重写;
备注:
1、接口的抽象实现类写了一个与接口里面一模一样的静态方法,不会对接口里面的静态方法产生影响;
2、接口的抽象实现类的子类写了一个与接口和接口的抽象实现类里面一模一样的静态方法,同样不会对接口和接口的抽象实现类里面的静态方法产生影响;
、在使用的时候都可以直接使用类名或接口名调取,相互之间不会影响;
使用:
接口:
代码语言:javascript代码运行次数:0运行复制public interface myInterface {
public static void talk(){
println("talk静态方法");
}
}
实现类(可有可无):
代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface {
//不能重写,也不用重写
}
Test测试类:
代码语言:javascript代码运行次数:0运行复制public class Test {
public static void main(String[] args) {
//错误写法
// MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl();
// ();//重写的默认方法
//正确写法:直接使用接口名称调用
();//talk静态方法
}
}
5、接口私有方法的使用
简介:
在接口中,我们需要抽取出来一个共有方法,来解决多个默认方法和静态方法之间重复代码的问题,但这个不能让实现类使用,这就产生了私有方法。(私有方法是给接口之内默认方法和静态方法调取的方法,其他地方不可使用)
分类:
普通私有方法:解决多个默认方法之间重复代码的问题;(注意:普通私有方法不能使用default)
代码语言:javascript代码运行次数:0运行复制 //普通私有方法
private String getame01(){
return "";
}
静态私有方法:解决多个静态方法之间重复代码的问题;
代码语言:javascript代码运行次数:0运行复制 //静态私有方法
private static String getTime01(){
return "";
}
使用:
接口:
代码语言:javascript代码运行次数:0运行复制public interface myInterface {
public static void talk1(){
println("talk1静态方法");
haha();
}
public static void talk2(){
println("talk2静态方法");
haha();
}
private static void haha(){
println("哈哈哈");
println("呵呵呵");
println("嘿嘿嘿");
println("哼哼哼");
}
public default void say1(){
println("say1默认方法");
hehe();
}
public default void say2(){
println("say2默认方法");
hehe();
}
//注意:普通私有方法不能使用default
private void hehe(){
println("哈哈哈");
println("呵呵呵");
println("嘿嘿嘿");
println("哼哼哼");
}
}
实现类:
代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface {
//不能重写静态方法,可以重写默认方法
}
测试类:
代码语言:javascript代码运行次数:0运行复制public class Test {
public static void main(String[] args) {
MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl();
myInterfaceImpl.say1();
// say1默认方法
// 哈哈哈
// 呵呵呵
// 嘿嘿嘿
// 哼哼哼
myInterfaceImpl.say2();
// say2默认方法
// 哈哈哈
// 呵呵呵
// 嘿嘿嘿
// 哼哼哼
1();
// say1静态方法
// 哈哈哈
// 呵呵呵
// 嘿嘿嘿
// 哼哼哼
2();
// say1静态方法
// 哈哈哈
// 呵呵呵
// 嘿嘿嘿
// 哼哼哼
}
}
6、接口中的常量的使用
注意:
①必须使用public static final修饰,因为是固定的,所以可以省略;
②接口中的常量必须赋值,一旦赋值,不可修改;
③常量名要完全大写;
使用:
接口:
代码语言:javascript代码运行次数:0运行复制public interface myInterface {
//public static final可以省略
public static final int A = 10;
}
Test测试类:
代码语言:javascript代码运行次数:0运行复制public class Test {
public static void main(String[] args) {
//直接使用接口名调用
println(myInterface.A);//10
}
}
7、继承父类并实现多个接口的时候
注意:
①接口是没有静态代码块和构造方法的;
②一个类的直接父类是唯一的,但可以实现多个接口;
③实现类实现了不同接口的同一默认方法,那么实现类必须重写该方法;
④实现类实现了不同接口的同一静态方法,没什么影响,因为静态方法是通过接口名调用的,用谁的就谁调用即可;
⑤实现类必须重写父类以及所实现接口的所有抽象方法,除非实现类本身是抽象类;
8、接口之间的多继承
注意:
①类与类之间是单继承的,即一个类只能有一个直接父类;
②类与接口之间是多实现的,即一个类可以实现多个接口;
③接口与接口之间是多继承的,即一个接口可以继承多个接口;
代码语言:javascript代码运行次数:0运行复制public interface fruit extends fruit01,fruit02{}
④实现类必须实现所有的抽象方法;
⑤子接口继承不同接口的同一静态方法不用重写(通过接口名调用,影响不到);
⑥子接口继承不同接口的同一默认方法必须重写;
⑦子接口继承不同接口的同一抽象方法是否重写无所谓;
使用:
接口1:
代码语言:javascript代码运行次数:0运行复制public interface myInterfaceA {
public default void say(){
println("myInterfaceA的默认say");
}
public static void say1(){
println("myInterfaceA的静态say1");
}
public abstract void say2();
}
接口2:
代码语言:javascript代码运行次数:0运行复制public interface myInterfaceB {
public default void say(){
println("myInterfaceB的默认say");
}
public static void say1(){
println("myInterfaceB的静态say1");
}
public abstract void say2();
}
接口:
代码语言:javascript代码运行次数:0运行复制public interface myInterface extends myInterfaceA,myInterfaceB {
//say默认方法必须重写
@Override
default void say() {
println("myInterface重写的默认say");
}
}
实现类:
代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface{
@Override
public void say2() {
println("实现类MyInterfaceImpl重写的say2");
}
}
Test测试类:
代码语言:javascript代码运行次数:0运行复制public class Test {
public static void main(String[] args) {
MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl();
myInterfaceImpl.say();//myInterface重写的默认say
myInterfaceImpl.say2();//实现类MyInterfaceImpl重写的say2
myInterfaceA.say1();//myInterfaceA的静态say1
myInterfaceB.say1();//myInterfaceB的静态say1
}
}
9、补充
检查一个对象是否实现了某接口
代码语言:javascript代码运行次数:0运行复制对象名 instanceof 接口名
返回值是布尔值;
多继承;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除public对象继承接口java#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:【Java设计模式】010
下一篇:【Java设计模式】009
推荐阅读
留言与评论(共有 18 条评论) |
本站网友 北京富康美发学校 | 21分钟前 发表 |
代码验证结果:是的! | |
本站网友 三菱东京日联银行 | 4分钟前 发表 |
接口默认方法的使用注意:①默认方法不强制被重写 | |
本站网友 如何去痘坑 | 18分钟前 发表 |
概述:接口是多个类的公共规范;代码语言:javascript代码运行次数:0运行复制接口是一种规范 | |
本站网友 母婴专家 | 30分钟前 发表 |
即一个类可以实现多个接口;③接口与接口之间是多继承的 | |
本站网友 张丽霞 | 20分钟前 发表 |
补充检查一个对象是否实现了某接口代码语言:javascript代码运行次数:0运行复制对象名 instanceof 接口名 返回值是布尔值;三 | |
本站网友 华夏人寿保险怎么样 | 9分钟前 发表 |
接口 | |
本站网友 yanhuang | 11分钟前 发表 |
接口 | |
本站网友 教程制作软件 | 4分钟前 发表 |
可以省略;使用:接口:代码语言:javascript代码运行次数:0运行复制public interface myInterface { public default void talk(){ println("talk默认方法"); } }实现类:代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface { //实现类可以重写默认方法 | |
本站网友 上海癫痫专科医院 | 21分钟前 发表 |
所以可以省略;②接口中的常量必须赋值 | |
本站网友 江南大学设计学院 | 22分钟前 发表 |
myInterfaceB { //say默认方法必须重写 @Override default void say() { println("myInterface重写的默认say"); } }实现类:代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface{ @Override public void say2() { println("实现类MyInterfaceImpl重写的say2"); } }Test测试类:代码语言:javascript代码运行次数:0运行复制public class Test { public static void main(String[] args) { MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl(); myInterfaceImpl.say();//myInterface重写的默认say myInterfaceImpl.say2();//实现类MyInterfaceImpl重写的say2 myInterfaceA.say1();//myInterfaceA的静态say1 myInterfaceB.say1();//myInterfaceB的静态say1 } }9 | |
本站网友 互联星空 | 16分钟前 发表 |
补充检查一个对象是否实现了某接口代码语言:javascript代码运行次数:0运行复制对象名 instanceof 接口名 返回值是布尔值;三 | |
本站网友 保济丸 | 18分钟前 发表 |
也可以不重写 @Override public void talk() { println("重写的默认方法"); } }Test测试方法:代码语言:javascript代码运行次数:0运行复制public class Test { public static void main(String[] args) { MyInterfaceImpl myInterface = new MyInterfaceImpl(); ();//重写的默认方法 } }4 | |
本站网友 寿光房产网 | 14分钟前 发表 |
但可以实现多个接口;③实现类实现了不同接口的同一默认方法 | |
本站网友 正则表达式数字 | 18分钟前 发表 |
但可以实现多个接口;③实现类实现了不同接口的同一默认方法 | |
本站网友 汇添富基金官网 | 26分钟前 发表 |
可以省略;使用:接口:代码语言:javascript代码运行次数:0运行复制public interface myInterface { public default void talk(){ println("talk默认方法"); } }实现类:代码语言:javascript代码运行次数:0运行复制public class MyInterfaceImpl implements myInterface { //实现类可以重写默认方法 | |
本站网友 济南保洁公司 | 4分钟前 发表 |
同样不会对接口和接口的抽象实现类里面的静态方法产生影响; | |
本站网友 深圳地产网 | 19分钟前 发表 |
接口简介1 |