7月28日学习日记

什么是接口

在Java中不直接支持多继承,因为会出现调用的不确定性,所以Java将多继承机制进行改良,在Java中 变成了多实现。一个类可以实现多个接口,一个接口可以继承多个接口

接口是一种特殊的抽象类,接口只能被abstract或者public修饰

没有构造器方法

public class Test {
public static void main(String[] args) {
System.out.println(IA.name); //常量可以直接使用
System.out.println(B.name); //实现类也可以直接访问常量
}
}
interface IA {
String name = "yanjun";// 接口中只能定义常量,不能定义属性,默认限定词
public static final,自定义限定词不能冲突
}
class B implements IA{}

可以包含抽象方法,也可以没有抽象方

interface IA1 {
}// 这个接口中没有包含任何抽象方法
class A1Impl implements IA1 {
}

接口中的方法只能被public、default、abstract、static修饰

一般情况下接口中只定义抽象方法

定义的方法默认为公开的抽象方法

interface IA2{
int ee();//默认public abstract int ee();
public void pp();//方法的限定词可以是public, abstract, default,
static,前面的public可以省略,如果不写默认public
public abstract void cc();//这里abstract可以省略,默认就是abstract
//在JDK1.8中引入特殊关键字default,允许提供默认实现
public default void dd(){ //这个方法的调用必须有实现类
System.out.println("dddd....");
}
//在JDK1.8中允许在接口中定义静态方法
public static void ff(){ //这个静态方法可以通过接口名称直接调用
IA2.ff()
System.out.println("ffffff");
}
}

抽象方法必须在实现类中提供实现

class A2Impl implements IA2{ //在实现类中必须实现接口中的所有抽象方法,否则当前
类只能是抽象类
public int ee() {
return 0;
}
public void pp() {
System.out.println("A2Impl....");
}
public void cc() {
System.out.println("A2Impl.....");
}
//dd方法由于在接口中有默认实现,所以可以不用重新定义,也允许重新定义
}

可以使用default关键字给抽象方法提供默认实现,有默认实现的方法在实现类中可以重新定义,也 可以不重新定义

接口允许多重继承

一个类在继承另一个类的同时,还可以实现多个接口

接口允许多重继承
interface IA1{
public void p1();
}
interface IA2{
public void p2();
}
interface IC extends IA1,IA2{
public void p3();
}//可以继承多个父接口,此时IC中实际有3个抽象方法
类是单根继承,不允许继承多个父类

允许一个类实现多个接口,但是每个接口的抽象方法都必须提供实现,否则是抽象类。提供的实现也可以 是继承

public class A1{
public void p1(){}
}
public class A2 extends A1 implements IA1,IA2{
public void p2(){}
}
public abstract class A3 extends A1 implements IA1,IA2{}//因为p2方法没有实现

接口的出现避免了单继承的局限性,这样定义C接口则拥有A+B的所有定义,可以使用A和B接口以及父 类D声明变量类型,直接new T。但是约束时,用谁声明变量编译器系统识别就是谁这种类型,也就意味 只能调用识别类型中的方法,不能调用其他方法

interface A{
public void p1();
}
interface B{
public void p2();
}
interface C extends A,B{}
class D{
public void abc(){}
}
class T extends D implements C{
public void p1(){}
public void p2(){}
}
D d=new T();这里只能调用abc方法,如果使用其他方法则需要进行类型转换
A a=new T();这里只能调用A接口中声明的方法p1
B b=new T();这里只能调用B接口中声明的方法p2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值