java多态 -- 猫狗案列
我们用猫狗案例来表明在java中使用多态的好处:
class Animal{
public Animal(){}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
class Cat extends Animal{
public Cat(){}
public void eat(){
System.out.println("猫吃鱼");
}
public void sleep(){
System.out.println("猫趴着睡觉");
}
}
class Dog extends Animal{
public Dog(){}
public void eat(){
System.out.println("狗吃肉");
}
public void sleep(){
System.out.println("狗站着睡觉");
}
}
class Pig extends Animal{
public Pig(){}
public void eat(){
System.out.println("猪吃草");
}
public void sleep(){
System.out.println("猪也趴着睡觉");
}
}
class AnimalTool{
//总结: 使用static方法与priva的原因是,避免有些笨蛋
//直接使用创建工具类对象的方式来访问工具类中的方法
private AnimalTool(){}
/*public static void useCat(Cat c){
c.eat();
c.sleep();
}
public static void useDog(Dog d){
d.eat();
d.sleep();
}
public static void usePig(Pig p){
p.eat();
p.sleep();
}
*/
public static void useAnimal(Animal a){
a.eat();
a.sleep();
}
}
class DuoTaiDemo2{
public static void main(String []args){
Cat c=new Cat();
c.eat();
c.sleep();
Cat c2=new Cat();
c2.eat();
c2.sleep();
Cat c3=new Cat();
c3.eat();
c3.sleep();
System.out.println("----------------");
//接下来是狗
Dog d=new Dog();
d.eat();
d.sleep();
Dog d2=new Dog();
d2.eat();
d2.sleep();
Dog d3=new Dog();
d3.eat();
d3.sleep();
System.out.println("----------------");
//接下来是 猪
Pig p=new Pig();
p.eat();
p.sleep();
Pig p2=new Pig();
p2.eat();
p2.sleep();
Pig p3=new Pig();
p3.eat();
p3.sleep();
/*
System.out.println("----------接下来利用工具类实现以上效果----------");
AnimalTool.useCat(c);
AnimalTool.useCat(c2);
AnimalTool.useCat(c3);
System.out.println("-------------");
AnimalTool.useDog(d);
AnimalTool.useDog(d2);
AnimalTool.useDog(d3);
System.out.println("-------------");
AnimalTool.usePig(p);
AnimalTool.usePig(p2);
AnimalTool.usePig(p3);
*/
System.out.println("----------接下来利用【多态性】类实现以上效果----------");
Animal cc=new Cat();
AnimalTool.useAnimal(cc);
Animal dd=new Dog();
AnimalTool.useAnimal(dd);
Animal pp=new Pig();
AnimalTool.useAnimal(pp);
}
}
在这个案例中,我们分别使用了三种方法逐渐优化。
第一种---笨方式
直接利用猫狗类创建对象,多次进行调用eat sleep方法,导致存在大量冗余代码。

第二种---创建工具类,将每个动物的eat sleep方法放在各自静态方法中,并将工具类构造方法声明为private,使其仅可通过类名调用。

在这种方法中,AnimalTool.useCat(c);这个语句相当于之前的 c.eat(); 两句,按之前方法,如果我们定义非常多猫,那代码岂不是冗余巨大?
c.sleep() ;
第三种------ 将工具类中各自的方法优化为一个:useAnimal(Animal a), 并在主函数中通过多态的方式创建对象,如 Animal a=new Cat();
这样减少的是工具类中的冗余代码。

以上。
java多态 -- 猫狗案列的更多相关文章
- Java中如何分析一个案列---猫狗案例为例
猫狗案例: 具体事务: 猫.狗 共性: 姓名.年龄.吃饭 分析:从具体到抽象 猫: 姓名.年龄--->成员变量 吃饭 ---> 成员方法 构造方法:无参.有参 狗: 姓名.年龄 ...
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- 09-02 java 多态
多态的前提.多态的特点 /* 多态:同一个对象(事物),在不同时刻体现出来的不同状态. 举例: 猫是猫,猫是动物. 水(液体,固体,气态). 多态的前提: A:要有继承关系. B:要有方法重写. 其实 ...
- Java-Runoob-面向对象:Java 多态
ylbtech-Java-Runoob-面向对象:Java 多态 1.返回顶部 1. Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操 ...
- 深入理解java多态没有烤山药的存在,java就不香了吗?
目录 1. 从吃烤山药重新认识多态 2. 多态前提条件[重点] 3. 多态的体现 4. 多态动态绑定与静态绑定 5. 多态特性的虚方法(virtual) 7. 向上转型 8. 向下转型 9. 向上向下 ...
- axis1,xfire,jUnit 测试案列+开Web Service开发指南+axis1.jar下载 代码
axis1,xfire,jUnit 测试案列+Web Service开发指南(中).pdf+axis1.jar下载 代码 项目和资源文档+jar 下载:http://download.csdn. ...
- 学JAVA第十六 天,JAVA多态
今天老师讲了多态的使用 多态是同一个行为具有多个不同表现形式或形态的能力. 多态的优点: 1. 消除类型之间的耦合关系 2. 可替换性 3. 可扩充性 4. 接口性 5. 灵活性 6. 简化性 我个 ...
- Java - 22 Java 多态
Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现. 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴 ...
- 大数据技术之_14_Oozie学习_Oozie 的简介+Oozie 的功能模块介绍+Oozie 的部署+Oozie 的使用案列
第1章 Oozie 的简介第2章 Oozie 的功能模块介绍2.1 模块2.2 常用节点第3章 Oozie 的部署3.1 部署 Hadoop(CDH版本的)3.1.1 解压缩 CDH 版本的 hado ...
随机推荐
- POJ2524-宗教问题-并查集-ACM
太难的搞不过,只能来写简单的了 POJ2524 无所不在的宗教 世界上宗教何其多.假设你对自己学校的学生总共有多少种宗教信仰很感兴趣.学校有n个学生,但是你不能直接问学生的信仰,不然他会感到很不舒服的 ...
- 分页插件jquery.simplePagination.js使用
利用ecshop后台,利用插件更改分页显示样式遇到的问题,由于是利用Ajax获取数据进行页面数据更新?所以出现了以下情况: 初始化页面前 : 分页更新后: 点击后出现了分页插件内容消失, 原因:分页一 ...
- .net 实例化对象
定义TestClass,在调用的地方 TestClass a; 如果下面有引用 a.Property,VS会报错,而如果 TestClass a = null; 再次调用的话则不会报错. TestCl ...
- tableview 重用nib cell
#import "ViewController.h" #import "NewsTableViewCell.h" #define UISCREEN_HEIGHT ...
- bzoj2180: 最小直径生成树
Description 输入一个无向图G=(V,E),W(a,b)表示边(a,b)之间的长度,求一棵生成树T,使得T的直径最小.树的直径即树的最长链,即树上距离最远的两点之间路径长度. Input 输 ...
- [BZOJ 1026] [SCOI 2009] Windy数 【数位DP】
题目链接:BZOJ - 1026 题目分析 这道题是一道数位DP的基础题,对于完全不会数位DP的我来说也是难题.. 对于询问 [a,b] 的区间的答案,我们对询问进行差分,求 [0,b] - [0,a ...
- VS2010安装Visual Assist
Visual Assist X是一款非常好的Microsoft Visual Studio 2005和Visual Studio .NET插件,支持C/C++,C#,ASP,Visual Basic, ...
- 【树状数组】CSU 1811 Tree Intersection (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 题目大意: 一棵树,N(2<=N<=105)个节点,每个节点有一种颜 ...
- Seasar2框架:AOP
Seasar2是由日本人开发的一个框架.它通过自己定义的规约,很大程度上地减少了设定代码.但是由于这个原因,导致了框架学习初期会有比较大的跨越. AOP例子: Greeting.java packag ...
- bzoj 1070 [SCOI2007]修车(最小费用最大流)
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3515 Solved: 1411[Submit][Status] ...