JAVA学习日志(8-1-多态)
2016-07-26 00:00
701 查看
多态:事物存在的多种体现形态
1.多态的体现
父类的引用指向了自己的子类对象
父类的引用接收了自己的子类对象
2.多态的前提
必须是类与类之间有关系,继承或实现
存在覆盖
3.多态的优点
多态的出现大大的提高程序的扩展性
**提高了扩展性,但只能使用父类的引用访问父类中的成员
4.多态的应用
如果要实现猫特有方法
则需要强制将父类的引用转成子类类型
不能将父类对象转为子类类型
多态自始至终都是子类对象在做着变化
判断指向的对象是否符合该类型:instanceof(通常用于有限的子类型|子类型的比较)
多态实例
1.多态的体现
父类的引用指向了自己的子类对象
父类的引用接收了自己的子类对象
2.多态的前提
必须是类与类之间有关系,继承或实现
/* 无法编译 */ abstract class Animal{ abstract void eat(); } class cat extends Animal{ public void eat(){ System.out.println("Fish"); } public void catchMouse(){ System.out.println("Catch Mouse"); } } class duotaiDemo{ public static void main(String[] args){ Animal x=new cat(); x.catchMouse; } }
存在覆盖
3.多态的优点
多态的出现大大的提高程序的扩展性
**提高了扩展性,但只能使用父类的引用访问父类中的成员
4.多态的应用
/* 动物, 猫,狗 */ abstract class Animal{ abstract void eat(); } class cat extends Animal{ public void eat(){ System.out.println("Fish"); } public void catchMouse(){ System.out.println("Catch Mouse"); } } class dog extends Animal{ public void eat(){ System.out.println("Bone"); } public void watch(){ System.out.println("Watch House"); } } class duotaiDemo{ public static void main(String[] args){ Animal c=new cat(); c.eat(); function(new dog()); } public static void function(Animal x){ x.eat(); } }
class duotaiDemo{ public static void main(String[] args){ Animal c=new cat(); //类型替身,向上转型 } }
如果要实现猫特有方法
则需要强制将父类的引用转成子类类型
class duotaiDemo{ public static void main(String[] args){ Animal c=new cat(); c.eat(); cat d=(cat)c; //向下转型 d.catchMouse(); } }
不能将父类对象转为子类类型
多态自始至终都是子类对象在做着变化
Animal a=new Animal(); Cat c=(Cat)a;
判断指向的对象是否符合该类型:instanceof(通常用于有限的子类型|子类型的比较)
if(a instanceof Cat){} else if(a instanceof Dog){}
多态实例
/* 基础班学生: 学习,睡觉 高级班学生: 学习,睡觉 可以将这两类事物进行抽取 */ abstract class Student{ public abstract void study(); public void sleep(){ System.out.println("ZzzzZzz"); } } class doStudent{ public void doSome(Student stu){ stu.study(); stu.sleep(); } } class baseStudent extends Student{ public void study(){ System.out.println("Base_Study"); } public void sleep(){ System.out.println("XxxxXxxxxx"); } } class advanceStudent extends Student{ public void study(){ System.out.println("Adv_Study"); } } class duotaiDemo2{ public static void main(String[] args){ doStudent ds=new doStudent(); ds.doSome(new baseStudent()); ds.doSome(new advanceStudent()); } }
相关文章推荐
- Java判断一个时间是否在另一个时间段内
- 浅谈java内部类
- 一个简单的java提取页面源码的示例
- 21、关于Drools Web版本与java实现简单交互
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
- 安卓java.lang.IllegalArgumentException: The observer is null.解决方案
- 安卓java.lang.IllegalArgumentException: The observer is null.解决方案
- 【java集合框架源码剖析系列】java源码剖析之TreeMap
- JavaI/O体系详解
- 【java集合框架源码剖析系列】java源码剖析之TreeMap
- JavaI/O体系详解
- 【java集合框架源码剖析系列】java源码剖析之TreeSet
- 安卓java.lang.IllegalStateException: The specified child already has a parent.解决方案
- 【java集合框架源码剖析系列】java源码剖析之TreeSet
- 安卓java.lang.IllegalStateException: The specified child already has a parent.解决方案
- javaRMI详解
- JAVA类加载机制
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
- 【java集合框架源码剖析系列】java源码剖析之HashSet