java重点 接口的理解

来源:互联网 发布:已知矩阵怎么求行列式 编辑:程序博客网 时间:2024/06/07 23:48
相信大家已经接触过Java了,看完接口的介绍 我还是一脸懵逼,这是学Java以来第一次感觉吃力的时候,相比之下 感觉接口很重要,现次将我的理解与大家分享。有哪些方面没有说到 还请大家多多谅解。微笑

首先举个简单的猫狗例子
“猫会撒娇 ,狗会看门”。假设这是这两个动物(类)与生俱来的能力(方法),然而有一些个经过特殊训练的猫猫和狗狗 打个比方 他们还会 算数和倒立,这个厉害吧。这些个猫猫狗狗不同于普通的猫狗。有了特殊的技能(方法),这时候为了把他们和普通的猫狗区别开,需要一个标志(接口),这个标志可以表明(含有)他们具有的特殊技能(方法),当他们带上这个标志(实现接口)后就可以达成区别他们的目标。

这里面的标志就是接口的一个特例,但是描述的又不完整,听我细细讲述:
我在想你是否理解接口大体上是干什么的了吧,如果是这样 我们来转述到Java方面:

接口:它是从多个类里面提取出来的特性或者说方法吧(和抽象类有着血缘关系,但是不近)但是他只能提取特性,具体实现特性 还得靠实现类本身
定义接口使用的是interface关键字 而不是class关键字
--------------------------------------------------------------------------------------------
[修饰符] interface 接口名
{
....
}
--------------------------------------------------------------------------------------------
接口里含有的方法只能是抽象方法(必须有),类方法,默认方法。还有常量,内部类,接口,枚举定义
默认方法:default关键字修饰的方法
类方法:static关键字修饰的方法
成员变量(常量):pubic static final 修饰 因为这些修饰符的关系 final修饰符 要求定义即赋值 以后不可再赋值 所以变量也就成为常量。
抽象方法:abstract关键字修饰的方法
既然接口里有抽象方法,我们在抽象类那边学习到抽象方法是没有方法体的,所以接口必须要靠另外一个类实现它的抽象方法
如果这个类实现了这个接口里的所有抽象方法 ,那么这个类就是接口的子类 这就是接口的实现,如果没有实现全部 ,那么这个类(因为没有实现全部抽象方法,所以他继承了上一个接口的抽象方法,所以呐,他就是一个抽象类咯,记得抽象类用什么关键字修饰?嗯哼)就变成了抽象方法。所以他也必须靠其他类来实现。

接口的继承么,通俗的讲,就是一个接口只要有extends关键字,他就可以拥有其他接口的成员啦。

继承接口靠关键字extends,接口实现靠关键字implement

实现类实现接口的格式:
-----------------------------------------------------------------------------------------------------
class 子接口【实现类】 implements 父接口1,父接口2,,,
{
。。。
}
------------------------------------------------------------------------------------------------------
继承的格式:
-----------------------------------------------------------------------------------------------------
interface 子接口 extends 父接口1,父接口2,,,
{
。。。
}
------------------------------------------------------------------------------------------------------
下来看一个实现接口的代码:
//定义动物培训接口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();}}

说了这么多 那接口有什么用呢?
其实前面我已经说了接口的一个功能,你忘了么?
没错,他可以提取各个类的特性,这样你的代码就会变得简单容易看懂。
你若不信 我给你看一个实例:




这是代码:
/*教练和运动员案例(学生分析然后讲解)乒乓球运动员和篮球运动员。乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语。请用所学知识:分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。整个分析过程,我是通过画图讲解的。*///定义一个说英语的接口interface SpeakEnglish {//说英语public abstract void speak();}//定义人的抽象类abstract class Person {private String name;private int age;public Person() {}public Person(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//睡觉public void sleep() {System.out.println("人都是要睡觉的");}//吃饭public abstract void eat();}//定义运动员抽象类abstract class Player extends Person {public Player() {}public Player(String name,int age) {super(name,age);}//学习public abstract void study();}//定义教练抽象类abstract class Coach extends Person {public Coach() {}public Coach(String name,int age) {super(name,age);}//教public abstract void teach();}//定义乒乓球运动员具体类class PingPangPlayer extends Player implements SpeakEnglish {public PingPangPlayer(){}public PingPangPlayer(String name,int age) {super(name,age);}//吃public void eat() {System.out.println("乒乓球运动员吃大白菜,喝小米粥");}//学习public void study() {System.out.println("乒乓球运动员学习如何发球和接球");}//说英语public void speak() {System.out.println("乒乓球运动员说英语");}}//定义篮球运动员具体类class BasketballPlayer extends Player {public BasketballPlayer(){}public BasketballPlayer(String name,int age) {super(name,age);}//吃public void eat() {System.out.println("篮球运动员吃牛肉,喝牛奶");}//学习public void study() {System.out.println("篮球运动员学习如何运球和投篮");}}//定义乒乓球教练具体类class PingPangCoach extends Coach implements SpeakEnglish {public PingPangCoach(){}public PingPangCoach(String name,int age) {super(name,age);}//吃public void eat() {System.out.println("乒乓球教练吃小白菜,喝大米粥");}//教public void teach() {System.out.println("乒乓球教练教如何发球和接球");}//说英语public void speak() {System.out.println("乒乓球教练说英语");}}//定义篮球教练具体类class BasketballCoach extends Coach {public BasketballCoach(){}public BasketballCoach(String name,int age) {super(name,age);}//吃public void eat() {System.out.println("篮球教练吃羊肉,喝羊奶");}//教public void teach() {System.out.println("篮球教练教如何运球和投篮");}}class InterfaceDemo {public static void main(String[] args) {//测试运动员(乒乓球运动员和篮球运动员)//乒乓球运动员PingPangPlayer ppp = new PingPangPlayer();ppp.setName("王浩");ppp.setAge(33);System.out.println(ppp.getName()+"---"+ppp.getAge());ppp.eat();ppp.sleep();ppp.study();ppp.speak();System.out.println("----------------");//通过带参构造给数据(留给你们)//篮球运动员BasketballPlayer bp = new BasketballPlayer();bp.setName("姚明");bp.setAge(34);System.out.println(bp.getName()+"---"+bp.getAge());bp.eat();bp.sleep();bp.study();//bp.speak(); //没有该方法//测试教练自己做//乒乓球教练PingPangCoach pi = new PingPangCoach();pi.setName("");pi.setAge();System.out.println("")pi.eat();pi.sleep();pi.study();pi.speak();System.out.println("----------------");}}

不知道你看到这有木有弄清一些呢?如果你清除了我会很高兴的,好了故事讲到这里,到了时间讲拜拜。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 喉咙里卡了米饭怎么办 孕妇吃了坏鹅蛋怎么办 1岁大宝宝长短腿怎么办 行测中的判断推理怎么办 塑料盖子玻璃罐头瓶子打不开怎么办 猪肉烫火锅吃怎么办料 自制腊肠放干了怎么办 孕妇吃了4块腊肉怎么办 衣服沾了火锅味怎么办 皮包上有火锅味怎么办 芝士年糕裂开了怎么办 制作牛肉酱咸了怎么办 腌牛肉太咸了怎么办 八宝粥的拉环断了怎么办 八宝粥易拉罐拉环断了怎么办 吃完辣的胃难受怎么办 天天呆在家很烦怎么办 吃多了荔枝上火怎么办 猛犸牙牌子裂了怎么办 玩游戏电脑卡了怎么办 电脑打开卡在选项界面怎么办? 红警突然卡死怎么办 柯基不吃狗粮怎么办 貔貅嘴巴磕破了怎么办 开光貔貅牙磕了怎么办 玉貔貅鼻子碎了怎么办 开光的貔貅摔坏了怎么办 貔貅摔坏了耳朵怎么办? 貔貅摔坏了一点点怎么办 天猫删评价扣4分怎么办 暴风影音下载电视剧下载不了怎么办 fm2017引援电脑买了怎么办 退休时医保不够二十年怎么办 和的面迟迟不发怎么办 做面条的面发了怎么办 发不起来的面团怎么办 如果婚后买房离婚后财产怎么办 空腹体检前喝水了怎么办 莆田市风俗婴儿死了怎么办后事 上司给你换不好岗位怎么办 领导要把我调走怎么办