java接口
一接口
1关键词interface进行修饰的一个类,叫接口。
eg:public interface myinterface(){
public void foo();
}
2接口中所有的方法都是public abstract.只有声明,没有实现,可以省略public abstract.只有声明,没有方法体。
3接口中属性是属于静态(Static)常量(final)
eg:public static final String usb="2000";
注:public static final可以省略。
3接口不可以被实例化
4用Static 修饰的常量,可以用接口名点来调用。
5无构造方法。
二如何实现接口
1用关键词implements来执行
2将接口中所有的方法都要重写
3可以实现多个接口,用逗号分开,接口中的方法要全部重写
eg:public class UsbInterfaceIm implements Usb,usb1{}
三如何使用接口,用多态来实现
父类的引用指向子类的对象
接口的引用指向实现类的对象
四接口表现一种能力
接口是一种能力,体现在接口的方法上
程序设计时,关心实现类有何能力,而不关心实现的具体细节。也就是面向接口的月约定而不考虑接口的具体实现。
五判断接口
例如:防盗门是一个门 是is-a的关系
防盗门有一个锁 是 has-a的关系
防盗门有开锁和上锁的能力
六接口有比抽象类更好的特性
1可以被多继承
2设计与实现完全分离
3更自然的使用多态
4更容易搭建程序框架
5更容易更换实现
例题用接口实现编写手机的功能,这是类图
代码:
父类手机:
public class Handset {
private String Brand;
private String type;
public String getBrand() {
return Brand;
}
public void setBrand(String brand) {
Brand = brand;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void sendInfo(){
System.out.println("发信息");
}
public void call(){
System.out.println("打电话");
}
public void Info(){
System.out.println("接受信息");
}
}
播放的接口
public interface Playwiring {
public void play(String n);
}
子类普通手机继承父类和实现接口
public class CommonHandset extends Handset implements Playwiring{
@Override
public void play(String n) {
setBrand("诺基亚");
setType("520型号");
String n1=getBrand();
String n2=getType();
System.out.print(n1+n2+"播放"+n);
}
public void sendInfo(){
setBrand("诺基亚手机");
setType("520型号");
String n1=getBrand();
String n2=getType();
System.out.println(n1+n2+"发信息");
}
public void call(){
System.out.println(getBrand()+getType()+"打电话");
}
public void Info(){
System.out.println(getBrand()+getType()+"接受信息");
}
}
链接网络和拍照的接口
public interface Network {
public void networkConn();
}
public interface TheakePictures {
public void takePicture();
}
子类智能手机继承父类和实现接口
public class AptitudeHandset extends Handset implements TheakePictures,Network,Playwiring{
@Override
public void play(String n) {
setBrand("华为荣耀");
setType("6x");
String s=getBrand();
String s1=getType();
System.out.println(s+s1+"播放"+n);
}
@Override
public void networkConn() {
setBrand("华为荣耀");
setType("6x");
String s=getBrand();
String s1=getType();
System.out.print(s+s1+"链接网络");
}
@Override
public void takePicture() {
setBrand("华为荣耀");
setType("6x");
String s=getBrand();
String s1=getType();
System.out.println(s+s1+"拍照功能");
}
public void sendInfo(){
setBrand("华为荣耀");
setType("6x");
String s=getBrand();
String s1=getType();
System.out.println(s+s1+"发信息");
}
public void call(){
setBrand("华为荣耀");
setType("6x");
String s=getBrand();
String s1=getType();
System.out.println(s+s1+"打电话");
}
public void Info(){
setBrand("华为荣耀");
setType("6x");
String s=getBrand();
String s1=getType();
System.out.println(s+s1+"接受信息");
}
}
测试类调用普通手机和只能手机的方法,实现该对应的功能
public class Test {
public static void main(String[] args) {
Playwiring phone=new CommonHandset();
phone.play("音频");
System.out.println(" ");
Handset p=new CommonHandset();
p.sendInfo();
p.call();
p.Info();
Playwiring phone1 = new AptitudeHandset();
phone1.play("视频");
TheakePictures phone2 =new AptitudeHandset();
phone2.takePicture();
Network phone3=new AptitudeHandset();
phone3. networkConn();
Handset u=new AptitudeHandset();
u.sendInfo();
u.call();
u.Info();
}