接口
2016-02-03 21:25
204 查看
接口概述
继续回到我们的猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不。但是,现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高,狗做计算等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的,对不。所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中,因为只有部分猫狗具备这些功能。所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可
接口的特点
A:接口用关键字interface表示 interface 接口名 {} B:类实现接口用implements表示 class 类名 implements 接口名 {} C:接口不能实例化 那么,接口如何实例化呢? 按照多态的方式来实例化。 D:接口的子类 a:可以是抽象类。但是意义不大。 b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案) 由此可见: A:具体类多态(几乎没有) B:抽象类多态(常用) C:接口多态(最常用)
//定义动物培训接口 interface AnimalTrain { public abstract void jump(); } //抽象类实现接口 abstract class Dog implements AnimalTrain { } //具体类实现接口 class Cat implements AnimalTrain { public void jump() { System.out.println("猫可以跳高了"); } } class InterfaceDemo { public static void main(String[] args) { //AnimalTrain是抽象的; 无法实例化 //AnimalTrain at = new AnimalTrain(); //at.jump(); AnimalTrain at = new Cat(); at.jump(); } }
接口成员特点
成员变量;只能是常量,并且是静态的。 默认修饰符:public static final 建议:自己手动给出。 构造方法:接口没有构造方法。 成员方法:只能是抽象方法。 默认修饰符:public abstract 建议:自己手动给出。 所有的类都默认继承自一个类:Object。 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。
interface Inter { public int num = 10; public final int num2 = 20; public static final int num3 = 30; //错误: 需要<标识符> //public Inter() {} //接口方法不能带有主体 //public void show() {} //abstract void show(); //默认public public void show(); //默认abstract } //接口名+Impl这种格式是接口的实现类格式 /* class InterImpl implements Inter { public InterImpl() { super(); } } */ class InterImpl extends Object implements Inter { public InterImpl() { super(); } public void show() {} } //测试类 class InterfaceDemo2 { public static void main(String[] args) { //创建对象 Inter i = new InterImpl(); System.out.println(i.num); System.out.println(i.num2); //i.num = 100; //i.num2 = 200; //System.out.println(i.num); //无法为最终变量num分配值 //System.out.println(i.num2);//无法为最终变量num2分配值 System.out.println(Inter.num); System.out.println(Inter.num2); System.out.println("--------------"); } }
类与接口之关系
类与类: 继承关系,只能单继承,可以多层继承。 类与接口: 实现关系,可以单实现,也可以多实现。 并且还可以在继承一个类的同时实现多个接口。 接口与接口: 继承关系,可以单继承,也可以多继承。
interface Father { public abstract void show(); } interface Mother { public abstract void show2(); } interface Sister extends Father,Mother { } //class Son implements Father,Mother //多实现 class Son extends Object implements Father,Mother { public void show() { System.out.println("show son"); } public void show2() { System.out.println("show2 son"); } } class InterfaceDemo3 { public static void main(String[] args) { //创建对象 Father f = new Son(); f.show(); //f.show2(); //报错 Mother m = new Son(); //m.show(); //报错 m.show2(); } }
抽象类和接口的区别
A:成员区别 抽象类: 成员变量:可以变量,也可以常量 构造方法:有 成员方法:可以抽象,也可以非抽象 接口: 成员变量:只可以常量 成员方法:只可以抽象 B:关系区别 类与类 继承,单继承 类与接口 实现,单实现,多实现 接口与接口 继承,单继承,多继承 C:设计理念区别 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
相关文章推荐
- scala在线练习题
- 【设计模式】六大原则
- GradView基础样式设计、分页、序号列
- uva 10655 - Contemplation! Algebra(矩阵高速幂)
- 一元多项式的运算
- x264命令行工具用法
- MySQL中UNSIGNED和ZEROFILL的介绍
- mvn profile 深层次目录打参数核心配置
- windows和linux上的包嗅探
- 每天思考一题
- ORMLite抛Can't find a no-arg constructor for class异常
- mysql忘记密码后,新建一个管理员账户
- Win32 进程间通信的分析与比较(13种方法)
- MySQL性能优化
- 将 mp3 等音乐资源以资源形式嵌入 exe 文件中
- 更改APP在admin中的显示名称(app.py还有什么用?)
- 【POJ】3294 Life Forms
- [WinAPI] API 5 [遍历驱动器并获取驱动器属性]
- SpringJUnit4测试--测试无反应/控制台报空指针的解决---junit的jar冲突!
- POJ1258 并查集和最小生成树