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("----------------");}}
不知道你看到这有木有弄清一些呢?如果你清除了我会很高兴的,好了故事讲到这里,到了时间讲拜拜。
阅读全文
0 0
- java重点 接口的理解
- 接口的使用(重点)
- java接口的理解
- Java接口的理解
- java接口的理解
- Java接口的理解
- Java的接口理解
- 接口回调(重点是理解)
- 都说接口回调很难..理解才是重点
- JAVA序列化理解---重点
- 深入理解Java虚拟机重点
- Java学习过程应该深入理解的一些重点
- Java学习过程应该深入理解的一些重点
- 【转载】Java学习过程应该深入理解的一些重点
- Java学习过程应该深入理解的一些重点
- Java学习过程中应该深入理解的一些重点
- Java学习过程中应该深入理解的一些重点
- Java学习过程中应该理解的一些重点内容
- 牛客网《剑指Offer》 二进制中1的个数
- Matlab——回归分析
- Java 8系列之重新认识HashMap
- grep详解
- window线程创建
- java重点 接口的理解
- Python | 数据整合
- CSS布局初体验
- ABAP 中的Screen, Dynpro, PBO, PAI小结
- day15 集合(一)
- 循环
- single-number-ii
- Unity3D之奇葩代码(1)
- 详解DTD & 渗透解析Doctype