Java基础>11 - 接口:interface、单继承多实现原因、与抽象类区别

学习总结:
链接:【Java基础、springboot、springcloud、docker 等,学习目录

注意:本文所有观点都是针对JDK1.7的,忽略了1.8中接口默认方法及静态方法的情况。

一、接口:
// 定义格式
interface interfaceName {
    // 属性  public static final
    String name = "Ron";
    // 抽象方法  public abstract
    String getName();
}
// 使用方式 implements 实现
class User implements interfaceName {
	public String getName(){
		return interfaceName.name;
	}
}

接口的设计思想:
1、拓展功能,哪个类需要改接口的功能,实现就可以了。
2、定义约束规范,接口其实就是暴露出来的规格。
3、程序解耦。
4、解决java单继承的弊端,接口可以多实现。
规范: 父类中定义事物的基本功能,接口中定义事物的拓展功能。

二、注意点:

1、接口是一个特殊的类,编译生成 .class 文件(javap查看)。
2、一个类可以实现多个接口,非抽象类需将接口中所有的方法都实现(JDK1.8中默认方法、静态方法除外),抽象类可实现可不实现。
3、接口中成员变量默认修饰符:public static final(可省略,编译默认加上),即接口中的成员变量都是常量(需赋初始值),调用方式:【接口名·变量】、【接口实现类·变量】、【实现类对象·变量】。
4、接口中成员方法默认修饰符:public abstract(可省略,编译默认加上)。
5、接口不能实例化。
6、接口没有构造方法(成员变量都是常量,方法都是抽象的,注意与抽象类中的构造方法区别,抽象类中的构造方法是给子类创建对象时初始化父类属性的)。

三、类、接口之间的关系:*
class A { }
class B { }
interface C { }
interface D { }
// 以下几种情况:
1、class E extends A, B { }  错误
2、class E implements C, D { } 正确
3、class E extends A implements C, D { } 正确
4、interface F extends C, D { } 正确
// 当某非抽象类实现了F接口,需将C、D、F中的接口全部实现。

问题:单继承、多实现解释:
1、class E extends A, B { } 错误:A、B类中可能出现同名的方法,E继承之后不知道调用哪一个,故java不支持多继承。
2、class E implements C, D { } 正确:C、D接口中若出现同名的方法,都是需要到实现类E中去具体实现的(即,具体的方法体只有一种),当对象在调用该同名的方法时,调用的是实现类中的具体方法,故,java支持多实现。
3、Java8 接口中被default修饰的方法(默认方法)具有方法体,接口实现类可不实现,但是被实现的多个接口中出现了同名的默认方法,其接口实现类需要重写该默认方法。

抽象类和接口的区别:

相同点:
1、都是位于继承的顶端、用于被其他类实现或继承。
2、包含抽象方法,其子类必须重写这些抽象方法才能实例化。
不同点:
在这里插入图片描述

推荐一篇抽象类和接口的区别相关文章:(注意相关观点也未涉及到JDK1.8中默认方法)
https://www.cnblogs.com/burns/p/4113527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值