面向对象---多态
来源:互联网 发布:如何自学软件测试 编辑:程序博客网 时间:2024/06/05 05:56
多态:
可以理解为事物存在的多种体现形态。
比如:人:男人,女人
多态的体现:
父类的引用指向了自己的子类对象。
父类的引用也可以接受自己的对象。
public class Demo44 {public static void main(String[] args){//Cat1 cat=new Cat1();//cat.eat();function(new Cat1());}public static void function(Animal1 a){//Animal1 cat=new Cat();父类的引用指向了自己的子类对象。a.eat();}}abstract class Animal1{abstract void eat();}class Cat1 extends Animal1{public void eat(){System.out.println("吃鱼");}}class Dog1 extends Animal1{public void eat(){System.out.println("吃骨头");}}
//如果想要调用猫的特有方法,如何操作?//强制将父类的引用,转成子类类型。
public class Demo44 {public static void main(String[] args){Animal1 cat=new Cat1();//类型提升,向上转型function(new Cat1());//如果想要调用猫的特有方法,如何操作?//强制将父类的引用,转成子类类型。Cat1 cat1=(Cat1) cat;cat1.catchMouse();}public static void function(Animal1 a){//Animal1 cat=new Cat();a.eat();}}abstract class Animal1{abstract void eat();}class Cat1 extends Animal1{public void eat(){System.out.println("吃鱼");}public void catchMouse(){System.out.println("捉老鼠");}}下面的操作是错误的,就是经父类对象转成子类类型。
我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被转换。Animal1 a=new Animal1();Cat1 c=(cat1)a;
注意:自始至终多态都是子类对象在做着变化。
public class Demo44 {public static void main(String[] args){function(new Cat1());}public static void function(Animal1 a){//Animal1 cat=new Cat();a.eat();if(a instanceof Cat1){//判断a 是否是Cat1 类型的Cat1 c=(Cat1) a;c.catchMouse();}else if(a instanceof Dog1){//判断a 是否是Dog1 类型的Dog1 d=(Dog1) a;d.kanjia();}}}abstract class Animal1{abstract void eat();}class Cat1 extends Animal1{public void eat(){System.out.println("吃鱼");}public void catchMouse(){System.out.println("捉老鼠");}}class Dog1 extends Animal1{public void eat(){System.out.println("吃骨头");}public void kanjia(){System.out.println("看家");}}
输出结果为:
吃鱼
捉老鼠
多态的前提
必须是类与类之间有关系,要么继承,要么实现。
通常还有一个前提,存在覆盖。
多态的好处
多态的出现大大的提高了代码的扩展性。
多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
多态的应用
需求:
1、基础班学生:
2、高级版学生学习、睡觉
学习、睡觉
可以将这两类事物进行抽取。
public class Demo45 {public static void main(String[] args) {//BaseStudent bs=new BaseStudent();//bs.study();//bs.sleep();//AdvStudent ad=new AdvStudent();//ad.study();//ad.sleep();doSomething(new BaseStudent());doSomething(new AdvStudent());}public static void doSomething(Student3 s){s.study();if(s instanceof BaseStudent){BaseStudent b=(BaseStudent) s;s.sleep();}else if(s instanceof AdvStudent){AdvStudent ad=(AdvStudent) s;s.sleep();}}}abstract class Student3{public abstract void study();public abstract void sleep();}class BaseStudent extends Student3{public void study(){System.out.println("base study");}public void sleep(){System.out.println("lying sleeep");}}class AdvStudent extends Student3{public void study(){System.out.println("adv study");}public void sleep(){System.out.println("siting study");}}
运行结果如下:
base study
lying sleeep
adv study
siting study改进的另一种方法:
public class Demo45 {public static void main(String[] args) {//BaseStudent bs=new BaseStudent();//bs.study();//bs.sleep();//AdvStudent ad=new AdvStudent();//ad.study();//ad.sleep();DoStudent ds=new DoStudent();ds.dosome(new BaseStudent());ds.dosome(new AdvStudent());}//public static void doSomething(Student3 s){//s.study();//if(s instanceof BaseStudent){//BaseStudent b=(BaseStudent) s;//s.sleep();//}else if(s instanceof AdvStudent){//AdvStudent ad=(AdvStudent) s;//s.sleep();//}//}}class DoStudent{public void dosome(Student3 stu){stu.study();stu.sleep();}}abstract class Student3{public abstract void study();public abstract void sleep();}class BaseStudent extends Student3{public void study(){System.out.println("base study");}public void sleep(){System.out.println("lying sleeep");}}class AdvStudent extends Student3{public void study(){System.out.println("adv study");}public void sleep(){System.out.println("siting study");}}
多态的出现代码中的特点(多态使用的注意事项)
阅读全文
0 0
- 面向对象(1)---多态
- 面向对象 -- 多态
- 面向对象--多态
- 面向对象_03_多态
- javaSE-面向对象-多态
- 面向对象-多态
- 面向对象-多态
- 面向对象--多态
- 面向对象-多态
- 面向对象--多态
- 17 面向对象 多态
- day04--面向对象--多态
- 面向对象_多态
- java面向对象-多态
- 面向对象特性-多态
- JavaScript 面向对象:多态
- java 面向对象 多态
- Java面向对象 ----多态
- SyntaxError: Non-ASCII character '\xe5' in file
- Kibana 默认Web 端口 5601 改为 80 的简单办法
- ios-步数的获取
- iptables案例:通过本地服务器转发访问远程数据库
- 深入浅出理解有限状态机
- 面向对象---多态
- 程序猿的日常——SpringMVC系统架构与流程回顾
- Maven之新建web项目后目录不全与jsp报错-yellowcong
- html head标签结构说明
- py-faster-rcnn demo.py分析(py-faster-rcnn)
- JavaShowAlgorithm-Binary Tree Longest Consecutive Sequence
- C#中的相等
- 烧脑的经典科幻电影—— 《The Matrix》
- 解决问题python