山东网站建设运行工资,网站建设买了服务器后怎么做,虎头图片在线制作,网站开发与设计.net文章目录基础介绍接口的定义关于接口字段和方法的说明使用接口抽象类和接口接口方法冲突的一些说明方法相同名称和参数#xff0c;返回值相同方法名称相同#xff0c;参数不同#xff0c;返回值相同方法返回值不同#xff0c;名称参数相同方法完全相同#xff0c;一个有默…
文章目录基础介绍接口的定义关于接口字段和方法的说明使用接口抽象类和接口接口方法冲突的一些说明方法相同名称和参数返回值相同方法名称相同参数不同返回值相同方法返回值不同名称参数相同方法完全相同一个有默认实现接口和类中方法冲突总结基础介绍
接口用来描述类应该做什么而不是指定它们具体应该怎么做。 在java中接口不是类而是对希望符合这个接口的类的一组需求。java只能继承一个类但是可以实现多个接口。
接口的定义
接口的定义如下
interface sports {}接口定义其实就是和类定义相似的。只不过把class换成了interface
我们在interface可以定义方法就像抽象类那样定义未实现的方法即可。类实现接口时就必须重写方法或者自己成为抽象类
interface Sports {void run();
}在接口里面可以定义方法的默认实现使用default关键字如果类实现接口时没有重写该方法那么该方法就会使用默认实现
interface Sports {void run();default void jump(){}
}现在我们可以暂时将接口看做为没有实例字段的抽象类。
关于接口字段和方法的说明
在接口中我们不能定义实例字段但是可以定义静态字段。
interface A {public static final int a 1;
}但是上面这样写IDEA会有提示 表示字段冗余其实在接口中我们定义的字段只能使用public static final进行修饰
我们在接口中可以定义静态方法
interface A {public static void t() {}
}对于接口里面的内容其实我们public修饰符可以不用写因为接口里面字段和方法的访问修饰符只能是public。
使用接口
我们先定义一个接口内容如下
interface Sports {void run();
}我们创建一个类来实现接口
class Cat implements Sports {Overridepublic void run() {System.out.println(cat--run);}
}这个其实和继承基本类似的只是将关键字从extends换成了implements
关于接口我们不能够使用new来实例化一个接口 Sports sports new Sports(); // ERROR但是可以声明接口变量然后引用实现了这个接口的类对象即可 Sports cat new Cat(); // OK对于接口我们将其看作实现接口类的父类就很好理解了
抽象类和接口
对于一个类我们只能继承一个类但是可以实现多个接口。我们就可以将接口看做没有实例字段并且可以被多继承的抽象类
interface A {}interface B {}class C implements A, B {}接口方法冲突的一些说明
方法相同名称和参数返回值相同
我们知道一个类可以实现多个接口如果接口有相同的方法名称和参数会怎么样呢如果有相同的名称和参数并且返回值相同那么我们只需要实现一个t方法即可
interface A {void t1();
}interface B {void t1();
}class C implements A, B {Overridepublic void t1() {}
}方法名称相同参数不同返回值相同
如果方法只有参数不同那么我们需要实现2个方法也就是会进行重载
interface A {void t1();
}interface B {void t1(int a);
}class C implements A, B {Overridepublic void t1() {}Overridepublic void t1(int a) {}
}方法返回值不同名称参数相同
如果方法名称相同参数相同而返回值不同那么就会报错我们无法同时实现2个名称相同参数也相同但是返回值不同的方法。
interface A {int t1();
}interface B {void t1();
}一个类无法同时实现A接口和B接口
方法完全相同一个有默认实现
如果2个接口一个有默认实现一个没有默认实现对于这种情况我们也必须实现该方法
interface A {default void t1() {}
}interface B {void t1();
}class C implements A, B {Overridepublic void t1() {A.super.t1();}
}但是我们可以通过 接口名.super.方法名调用默认实现的方法
接口和类中方法冲突
对于接口和类冲突的都以类为准也就是类优先原则不管接口是否有默认实现都会被超类中的方法覆盖
interface A {default void t1() {System.out.println(interface);}
}interface B {void t1();
}class C {public void t1() {System.out.println(class);}
}class D extends C implements A, B {}我们使用D来调用t1方法将会输出class D d new D();d.t1(); // 输出class总结
对于接口我们将其看作可以被多继承的并且不能有实例字段的抽象类就行了。对于接口和接口发生冲突时只要返回类型相同我们就可以处理如果返回类型不同那就不能同时实现有冲突的接口了。如果接口和超类发生冲突那么就是以类优先原则来进行解决的。