通过案例的形式,结束接口部分。

/*
猫狗案例,加入跳高的额外功能 分析:从具体到抽象
猫:
姓名,年龄
吃饭,睡觉
狗:
姓名,年龄
吃饭,睡觉 由于有共性功能,所以,我们抽取出一个父类:
动物:
姓名,年龄
吃饭();//吃的不一样,定义为抽象方法
睡觉(){} 猫:继承自动物
狗:继承自动物 跳高的额外功能是一个新的扩展功能,所以我们要定义一个接口
接口:
跳高 部分猫:实现跳高
部分狗:实现跳高
实现;
从抽象到具体,这个具体意思是实现后都是具体内容 使用:
使用具体类
*/
//定义跳高接口
interface Jumpping {
//跳高功能
public abstract void jump();
} //定义抽象类
abstract class Animal {
//姓名
private String name;
//年龄
private int age; public Animal() {} public Animal(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 abstract void eat(); //睡觉(){}
public void sleep() {
System.out.println("睡觉觉了");
}
} //具体猫类 class Cat extends Animal {//猫不具备跳高功能的猫
public Cat(){} public Cat(String name,int age) {
super(name,age);
} public void eat() {
System.out.println("猫吃鱼");
}
} //具体狗类,同猫
class Dog extends Animal {
public Dog(){} public Dog(String name,int age) {
super(name,age);
} public void eat() {
System.out.println("狗吃肉");
}
} //有跳高功能的猫,在继承一个类的同时实现接口
class JumpCat extends Cat implements Jumpping {
public JumpCat() {} public JumpCat(String name,int age) {
super(name,age);
} public void jump() {
System.out.println("跳高猫");
}
} //有跳高功能的狗,在继承一个类的同时实现接口
class JumpDog extends Dog implements Jumpping {
public JumpDog() {} public JumpDog(String name,int age) {
super(name,age);
}
public void jump() {//对接口中的抽象进行重写实现
System.out.println("跳高狗");
}
} class InterfaceTest {
public static void main(String[] args) {
//定义跳高猫并测试
Jumpping jum = new JumpCat();//多态的方式实现
JumpCat jc = new JumpCat();//自己类对象形式
jc.setName("哆啦A梦");
jc.setAge(3);
System.out.println(jc.getName()+"---"+jc.getAge());
jc.eat();
jc.sleep();
jc.jump();
jum.jump();//多态的方式,实现了特殊跳高功能
System.out.println("-----------------"); JumpCat jc2 = new JumpCat("加菲猫",2);
System.out.println(jc2.getName()+"---"+jc2.getAge());
jc2.eat();
jc2.sleep();
jc2.jump(); //定义跳高狗
Jumpping jum1 = new JumpDog();
JumpDog jd = new JumpDog();
jd.setAge(4);
jd.setName("叶晨");
System.out.println(jd.getName()+"-----"+jd.getAge());
jd.eat();
jd.sleep();
jd.jump();
jum1.jump();
System.out.println("-----------------"); JumpDog jd1 = new JumpDog("邱加泺",23);//用自己创建对象。
System.out.println(jd1.getAge()+"------"+jd1.getName());
jd1.eat();
jd1.sleep();
jd1.jump();
}
}

到目前为止,面向对象部分快要结束了。下一篇(http://blog.csdn.net/qq_32059827/article/details/51338014)将会通过一个小案例对面向对象所有内容以案例的形式进行总结。

《java入门第一季》之面向对象(接口收尾)的更多相关文章

  1. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  2. Java入门第一季——从此投身Java??

    找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季  一.简 ...

  3. 《java入门第一季》之面向对象(谈谈接口)

    软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的 ...

  4. Java入门第一季

    慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...

  5. 《java入门第一季》之Arrays类前传(排序案例以二分查找注意的问题)

    根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: ...

  6. 《java入门第一季》之面向对象多态面试题(多态收尾)

    /* 看程序写结果:先判断有没有问题,如果没有,写出结果 */ class A { public void show() { show2(); } public void show2() { Syst ...

  7. 《java入门第一季》之面向对象接口面试题

    首先,(1)叙述接口的成员特点: /* 接口成员特点 成员变量:只能是常量,默认都是常量,并且是静态的. 默认修饰符:public static final 建议:自己手动给出类似:public st ...

  8. 《java入门第一季》之面向对象静态内部类和非静态内部类的区别

    很感谢在内部类章节,"开心阳"先生给与的建议.使用静态内部类.这里就简单说一下静态内部类的使用. package com.devin; public class MyMain{ p ...

  9. 《java入门第一季》之面向对象(包概述)

    由于eclipse等ide的强大功能,使得建包,导包用一些快捷键就能完成.这里对包的概念做稍微的叙述,了解即可: 分包后使得项目更加清晰,提高代码维护性. 包:         A:其实就是文件夹   ...

随机推荐

  1. Android简易实战教程--第三十六话《电话录音》

    今天完成一个简单的电话录音功能,即接通电话后,立即录下自己打电话的声音.实现起来比较简单:一个服务,一个TelephonyManager.一个MediaRecorder就够了. 1.布局提供一个开启录 ...

  2. Servlet常用操作(基础)

    ----------------------------------------------------------------------------------------------[版权申明: ...

  3. PGM:贝叶斯网的参数估计

    http://blog.csdn.net/pipisorry/article/details/52578631 本文讨论(完备数据的)贝叶斯网的参数估计问题:贝叶斯网的MLE最大似然估计和贝叶斯估计. ...

  4. SpringMVC源码分析--文件上传

    SpringMVC提供了文件上传的功能,接下来我们就简单了解一下SpringMVC文件上传的开发及大致过程. 首先需要在springMVC的配置文件中配置文件上传解析器 <bean id=&qu ...

  5. Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  6. Hibernate之综合问题

    n + 1问题 query.iterate()方式返回迭代查询会开始发出一条语句:查询所有记录ID语句 Hibernate: select student0_.id ascol_0_0_from t_ ...

  7. Swift中switch强大的模式匹配

    不少人觉得Swift中switch语句和C或C++,乃至ObjC中的差不多,此言大谬! 让本猫带领大家看一下Swift中switch语句模式匹配的威力. 所谓模式匹配就是利用一定模式(比如couple ...

  8. Dynamics CRM2015 页面导航栏顶部全局快速查找功能配置

    在CRM2015中微软加入了新的快速查找功能,让你的数据查找更加方便,功能栏如下图所示,直接可以框中输入搜索项进行搜索. 但该功能是需要进行些配置,具体的配置在设置-管理-系统设置中,默认的就是红框中 ...

  9. 指令汇C电子市场开发(一) ActionBar的使用

    前话: 在学习开发谷歌电子市场的的时候,我换了一款比较高大上的模拟器--genymotion,首先去genymotion的官网注册下载,然后安装.感觉这款模拟器运行挺快的,哈哈,而且可以直接把应用拖进 ...

  10. Dynamics CRM 窗体Javascript获取时间字段值的准确转换

    本篇延续上篇博文继续时间字段的转化实验,本篇讲的是在窗体Javascript中获取及更新时间字段的具体写法,是否需要进行时制的转化,先看下通过ODATA取到的时间字段值 当然取出来看格式就知道是不能直 ...