多态(polymorphic):事物存在的多种形态
多态前提
   (1)要有继承关系
   (2)要有方法重写
   (3)要有父类引用指向子类对象
多态好处
   (1)提高了代码的维护性
   (2)提高了代码的扩展性
多态坏处

不能使用子类的特有属性和行为

成员变量
     编译看左边(父类),运行看左边(父类)
成员方法
     编译看左边(父类),运行看右边(子类)
静态方法
     编译看左边(父类),运行看左边(父类);
     静态和类相关,算不上重写,因此访问还是左边的

只有非静态的成员方法,编译看左边,运行看右边

class Polymorphic{public static void main(String[] args){Cat c = new Cat();c.eat();Animal a = new Cat();           //父类引用指向子类对象,就是向上转型a.eat();// a.catchMouse();Cat c1 = (Cat)a;                //向下转型c1.catchMouse(); //多态提高扩展性animalEat(new Cat());          //一般在实际开发中创建对象时使用父类应用指向子类对象,直接创建子类对象更方便,可以使用子类中的特有属性和行为animalEat(new Dog());System.out.println("------------------------");Father f = new Son();          //父类引用指向子类对象System.out.println(f.num);f.print();f.staticPrint();                //相当于使用类名去调用System.out.println("------------------------");//基本数据类型自动类型提升和强制类型转换int i = 10;byte b = 20;// i = b;                         //自动类型提升// b = (byte)i;                    //强制转换}//如果两子类之间强转,就会出现类型转换异常,ClassCastExceptionpublic static void animalEat(Animal a){ //当做参数时使用多态最好,因为扩展性好a.eat();// a.catchMouse();            //不能使用子类的特有属性和行为//关键字 instanceof 判断前边的引用是否为后边的数据类型if (a instanceof Cat) {Cat c = (Cat)a;c.eat();c.catchMouse();}else if (a instanceof Dog) {Dog d = (Dog)a;d.eat();d.lookHome();}else{a.eat();}}
}class Animal{public void eat(){System.out.println("动物吃饭");}
}class Cat extends Animal{public void eat(){System.out.println("猫吃鱼");}public void catchMouse(){System.out.println("猫抓老鼠");}
}class Dog extends Animal{public void eat(){System.out.println("狗吃肉");}public void lookHome(){System.out.println("狗看门");}
}/*成员变量编译看左边(父类),运行看左边(父类)成员方法编译看左边(父类),运行看右边(子类)静态方法编译看左边(父类),运行看左边(父类);静态和类相关,算不上重写,因此访问还是左边的只有非静态的成员方法,编译看左边,运行看右边
*/
class Father{int num = 10;public void print(){System.out.println("Father");}public static void staticPrint(){System.out.println("static Father");}
}class Son extends Father{int num = 20;public void print(){System.out.println("Son");}public static void staticPrint(){System.out.println("static Son");}
}

成员变量:

成员方法:

父类不能调用子类的方法,报错:

最终输出:

Java--多态(polymorphic),上下转型,多态好处弊端相关推荐

  1. JavaSE基础知识(十八)--Java多态之向上转型(多态初步)

    Java SE 是什么,包括哪些内容(十八)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 开篇一句很重要的话:在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种 ...

  2. inheritance中文Java语言_3.3Java语言面向对象的封装(Encapsulation)、继承(Inheritance)、多态(polymorphic)...

    封装(Encapsulation) 封装是处理对象的一个重要概念,从形式上看,封装将数据和行为组合在一个包里面,并对对象的使用者隐藏具体的实现方式,对象的数据称为实例字段(instance field ...

  3. Java从入门到放弃09---多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别

    Java从入门到放弃09-多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别 01 多态 多态指的是 ...

  4. java 父类转子类_Java多态,对象转型,和简单工厂模式。希望对您有帮助!

    各位读者老爷们大家好鸭~图图又来了,今天我们要说一下"多态". 怎么理解这两个字呢?可以理解为同一个引用对象的不同表现形态,即将父类的引用指向子类的对象.这是比较官方的书面解释,大 ...

  5. 1-11 Java 多态、类型转型

    文章目录 1.业务场景 2.多态调用 3.多态应用 1)业务场景 2)传统代码实现 3)问题思考 4)多态代码实现 4.向上.向下转型 1)举例 2)小总结 面向对象特征:抽象.封装.继承和多态,这些 ...

  6. Java基础:继承、多态、抽象、接口

    第一讲    继承 一.继承概述 1.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 2.通过extends关键字可以实现类与类的 ...

  7. Java11-day02【多态(成员访问、多态转型、内存图解)、抽象类(成员特点)、接口(成员特点)、类和接口的关系、抽象类和接口的区别、综合案例】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  8. java提高篇四_(转)java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  9. java多态的实现_Java多态的实现机制是什么,写得非常好!

    作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html 2019-06-13 08:46:00 Java多态的实现机制是父类或接 ...

最新文章

  1. Eclipse中写jsp文件时,发现里面加载不了js文件和css文件(解决css文件在eclipse中显示不了)
  2. 用Docker搭建Laravel和Vue项目的开发环境
  3. linux修改文件权限的命令_Linux基础文件权限管理
  4. 大众仪表板上为什么30km,50km处要标红?
  5. Android.mk 语法详解
  6. 4.串口操作之API篇 CreateFile
  7. 混合云向边缘延伸!ZStack Mini超融合和ZStack CMP重磅发布!
  8. linux 忘记了密码,Linux忘记密码的解救方法
  9. python画矩形孔衍射振幅图_利用Python将图片中扭曲矩形的复原
  10. Django - 模型层 - 关系类型字段
  11. TCP的AIMD(加性增窗、乘性减窗)策略
  12. 07-24 什么是串口
  13. linux 目录 特殊符号,Linux常见特殊符号
  14. Hadoop报错java.lang.UnsupportedClassVersionError: com/sjt/mr/myjob/MyJob : Unsupported major
  15. Python数据分析师使用低代码Streamlit实现Web数据可视化方法——入门篇
  16. 华米科技“中美两开花”:美股主体将更名为ZEPP,业绩已腰斩
  17. 邓仲祥:用甘肃地名命名的和政化石标本
  18. java02win7x64_Win 7 64位下jdk(java)1.8.X(64位)的经验
  19. 日语五十音图表 日语学习
  20. android开发语言列表及对应简写

热门文章

  1. LNMP详解(三)——Nginx版本更新实战
  2. 文件夹中的多Excel文件合并
  3. ubuntu切换root用户出错:sudo:无法切换为root组ID:不允许的操作
  4. css3蒲公英飘动效果_CSS3 实现飘动的云朵动画
  5. redis 平滑重启
  6. scandir按文件名升序获取满足条件的文件名
  7. Python的字符串split或re.split方法产生空字符的解决方法
  8. window下面如何安装swoole
  9. 大学计算机专业容易挂科的内容,大学最“烧脑”的3类专业,很容易挂科,但就业前景一片大好!...
  10. PHP——chr 函数将ASCII转化为字符,ord 函数将字符转化为ASCII