Java学习笔记-接⼝与实现
⽂章⽬录
前⾔
接⼝是JAVA与C#独有的⼀种数据类型,通过关键字interface来声明。
⼀、接⼝
Java接⼝是⼀系列⽅法的声明,是⼀些⽅法特征的集合,⼀个接⼝只有⽅法的特征没有⽅法的实现,因此这些⽅法可以在不同的地⽅被不同的类实现,⽽这些实现可以具有不同的⾏为(功能)。
两种含义:
⼀,Java接⼝,Java语⾔中存在的结构,有特定的语法和结构;
⼆,⼀个类所具有的⽅法的特征集合,是⼀种逻辑上的抽象。前者叫做“Java接⼝”,后者叫做“接⼝”。使⽤关键字interface来声明⾃⼰是⼀个接⼝。如下:
interface Printable{
final int MAX=100;
void add();
......
}
【注】接⼝体内包含有常量,没有变量必须全是常量,即需要给出初值。⽽且这些常量均为public类型的变量。⽽且是static类型。接⼝体内的⽅法都是抽象⽅法,访问权限同样为public。可以省略public,static等关键字。
⼆、实现接⼝
1.类实现接⼝
Java语⾔中接⼝有类通过关键字implements实现。例如:
class A implement B,C{//其中B.C 是通过关键字声明的接⼝
.....
}
2.重写接⼝中的⽅法
如果⼀个⾮抽象类实现了⼀个接⼝,那么在这个类中必须要重写接⼝中的⽅法。⽽且⽅法必须是public类型的(且不能忘记关键字public)同时不能降低⽅法访问权限。如果该类是⼀个抽象类,可以不对接⼝中的⽅法进⾏重写。当然也可以重写,或者直接使他的⽅法。
3.有关借⼝的细节说明
程序中可以直接通过接⼝名称访问接⼝中的常量,但是如果⼀个类实现了某个接⼝,那么在类中可以直接使⽤接⼝内的常量。
如果⼀个接⼝的访问权限是public那么可以被任何⼀个类实现。没有关键字public修饰的接⼝被称为友好接⼝。友好借⼝只能被和它属于同⼀个包下的类实现。
⽗类实现的接⼝,在⼦类中也同样实现。
接⼝也是可以通过关键字extends实现继承,⼦接⼝继承⽗接⼝的所有常量与⽅法。
【注】通过import语句导⼊包的同时也导⼊了接⼝。
3:接⼝回调
假设存在⼀个类A,以及它实现的接⼝B,当A创建⼀个对象a时,接⼝B有⼀个接⼝变量b,当把类A的对象a的引⽤赋值给b时,变量b就可以调⽤被类实现的接⼝⽅法了(实际接⼝变量调⽤⽅法就等于类对象在调⽤⽅法)此时接⼝变量和类对象的引⽤⼀致。但是需要注意的是,此接⼝变量⽆法使⽤⾮接⼝类的⽅法。例如:
interface B{
void display();
}
class A implements B{
public void display();
void sum();
}
public class Test{
public static void main(String args[]){
B b;
b=new A;
b.dispaly(.....);//合法
b.sum(.....);//不合法
}
}
4:接⼝与动态
接⼝的多态性是指:当同⼀个接⼝被不同的类实现的时候,接⼝变量在回调接⼝⽅法时具有多种形态的现象。
例如,a,b是⼀个接⼝内的⽅法。当被不同的类实现的时候,A类要计算a,b的算数平均数,⽽B类要计算a,b的⼏何平均数,这既是接⼝的多态。
5:接⼝参数
接⼝参数就是指:某⼀个⽅法的参数类型为接⼝型。
当某⼀个⽅法的参数类型为接⼝类型时,我们就可以将任意⼀个实现⼀个该接⼝的类的引⽤传递给该参数。此时可以通过该参数可以调⽤每个实现该⽅法类的重写⽅法(回调类实现的接⼝⽅法)。
例如;
interface SpeakHello{
void SpeakHello();
}
class Chinese implements SpeakHello{
public void SpeakHello(){
System.out.println("你好吃饭了吗");
}
}
class English implements SpeakHello{
public vois SpeakHello(){
System.out.println("Hello world!");
}
}
class KindHello{
public void lookHello(SpeakHello hell0){
hello.SpeakHello();
}
}
public class Test{
public static void main(String args[]){
kindHello kindhello=new KindHello;
KindHello.lookHello(new Chinese());//lookhello的⽅法参数为接⼝类型,所以可以将实现他的类的引⽤(new Chinese),传递给接⼝类型的参数,此时可以直接调⽤Chinese⽅法SpeakHello⽅法。
KindHello.lookHello(new English());
}
}
5:abstract类与接⼝的⽐较
(1):abstract类与接⼝中均可存在abstract⽅法。
java接口可以创建对象吗
(2):接⼝中只能有常量不能存在变量,⽽abstract类中⼆者均可存在。
(3):abstract类中可以存在⾮abstract⽅法,接⼝不可以。
(4):如果某个程序需要通过继承来实现继承⼀些⽗类的变量时,可以考虑抽象类。不需要继承,⽽只是需要若⼲类给出的某些重要的抽象⽅法的实现细节时,可以考虑接⼝。
(5):抽象类中的⽅法的实现交给它的⼦类来实现,⽽接⼝中的⽅法的实现则是交给实现该接⼝的类完成。
总结
(1):接⼝和接⼝体中只可以有常量和抽象⽅法。
(2):接⼝也是Java的⼀种重要的数据类型,接⼝变量只能存放在实现改接⼝的类的实例(对象)的引⽤。
(3):当接⼝变量中存放了实现接⼝类的对象的引⽤后,接⼝变量就可以调⽤类实现的接⼝⽅法,这⼀过程被称为就接⼝回调。
(4):接⼝产⽣的多态是指不同的类实现同⼀接⼝是时可能具有不同的实现⽅法。】
(5):使⽤多态设计程序时,要熟练的使⽤接⼝回调技术即⾯向接⼝编程的思想。实现“开-闭原则”。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论