当前位置: 首页 > news >正文

网站建设---部署与发布网站开发 商标注册

网站建设---部署与发布,网站开发 商标注册,北京最新头条新闻,哈尔滨网站开发公司#x1f387;个人主页#xff1a;Ice_Sugar_7 #x1f387;所属专栏#xff1a;快来卷Java啦 #x1f387;欢迎点赞收藏加关注哦#xff01; 类和对象3 #x1f349;多态#x1f34c;重写#x1f34c;向上转型向下转型#x1f34c;静态绑定动态绑定#x… 个人主页Ice_Sugar_7 所属专栏快来卷Java啦 欢迎点赞收藏加关注哦 类和对象3 多态重写向上转型向下转型静态绑定动态绑定多态的利弊 写在最后 多态 概念对于同一个行为不同的对象去做会产生不同的状态 比如对于吃这个行为狗这个对象去做的话就是吃狗粮猫去做的话就是吃猫粮 再比如对于景区买票这个行为学生去做的话就是买学生票儿童去做的话就是买儿童票成人去做的话就是买成人票 java中的多态指同一个方法可以根据接收的不同参数类型产生不同的行为 要实现多态必须同时满足以下几个条件 子类必须要对父类中方法进行重写必须在继承体系下实现向上转型通过父类的引用调用重写的方法 下面对这些条件一一讲解 重写 在继承关系上如果满足 方法名一样方法的参数列表一样 那我们就说这两个方法之间的关系是重写 举个例子 public class Animal {public String name;public int age;public void eat() {System.out.println(name正在吃饭);} }public class Dog extends Animal{public String color;Overridepublic void eat() {System.out.println(name在吃狗粮);} }父类中有一个eat方法而子类中也有一个不同点在于它们所吃的东西不同一个吃饭、一个吃狗粮 重写的规则 被重写的父类方法不能被private、final修饰并且不是构造方法、静态方法被重写的方法返回值类型可以不同但必须具有父子关系子类方法的访问权限不能低于父类中被重写方法的访问权限。比如父类方法被public修饰那子类中重写的方法就不能声明为 protected重写的方法可以使用 Override 注解来显式指定它能帮我们进行校验确保顺利重写 重写和重载的区别 向上转型向下转型 一、向上转型 创建一个子类对象但是用父类引用来引用它 语法格式父类类型 对象名 new 子类类型() Animal animal new Cat(Mimi,1);Animal是父类类型但可以引用一个子类对象因为是从小范围向大范围的转换子类是小范围父类是大范围这就类似隐式类型转换安全性很好 常见的可以发生向上转型的场景 直接赋值 这个就是刚才上面所举的例子 方法传参 形参为父类引用可以接收任意子类对象 public static void eat(Animal a){a.eat(); }public static void main(String[] args) {Cat cat new Cat(Mimi,1);eat(cat); }作为返回值返回 方法的返回类型为父类类型返回任意子类对象 public Animal func() {Dog dog new Dog();return dog; }向上转型可以提高代码的灵活性、通用性比如说有一个方法的参数类型是Animal类那它就可以接收Dog类、Cat类、Bird类等实参而且根据传递的对象的类型确定要使用哪个对象的具体表现比如传Dog类就表现出跑的动作而传Bird类就表现出飞的动作这就是我们所讲的多态 二、向下转型 将一个子类对象向上转型之后它不能调用子类特有的属性、方法但有时候可能需要调用子类特有的方法所以将父类引用再还原为子类对象即可即向下转型 简而言之就是父类强制类型转换之后给子类。从谁转型上来的就转下去成为谁 但是向下转型不太安全因为需要进行强制类型转换如果转换后的类型与向上转型之前子类对象类型不一致的话运行时就会抛异常 举个例子比如我想让狗喵喵叫这肯定是不行的 public static void main(String[] args) {Animal animal new Cat();Animal animal1 new Dog();Dog dog new Dog();dog (Dog)animal1; //向下转型成功dog (Cat)animal; //转换失败因为animal不是由Cat类型向上转型得到的dog.mew();}为了防止报错可以在向下转型之前使用关键字instanceof进行检验 o1 instanceof o2 instanceof可以用来判断o1是否是o2或者o2子类实例化的对象如果是返回true反之返回false 而对于第三个条件通过父类的引用调用重写的方法。其实你会发现只要满足前面两个条件那第三个条件肯定也满足了 满足三个条件之后就会发生动态绑定它是多态的基础。而有动态绑定那自然也有静态绑定下面对这两个概念进行解析 静态绑定动态绑定 静态绑定 在编译阶段就确定要调用哪个函数 int add(int x,int y) {return xy;}int add(int x,int y,int z) {return xyz;}比如上面两个add方法构成重载在编译阶段根据所传参数个数就能确定要调用哪个add方法 动态绑定 当一个父类的引用指向一个子类的对象时可以通过父类的引用调用子类重写的方法。这种情况下Java会根据对象的实际类型来决定调用哪个方法这就是动态绑定 动态绑定是在程序运行期间才确定要调用哪个方法 public static void main(String[] args) {Animal animal new Dog(圆圆,19);animal.eat();}当调用一个方法时编译器会根据引用的类型来确定要调用的方法所以在编译阶段调用的还是Animal的eat方法通过汇编可以观察到 但是程序运行时实际上被调用的方法是由引用所指向的对象的类型决定的所以我们看到运行结果是调用Dog的eat方法 多态的利弊 多态的好处 能够简化代码避免使用大量的 if - else 比如要写一个类来打印不同的图案○、△、❀如果不基于多态实现的代码如下 public class Shape {public Shape shape;public void draw() {System.out.println(画一个图形);} }public class Circle extends Shape{Overridepublic void draw() {System.out.println(○);} }public class Triangle extends Shape{Overridepublic void draw() {System.out.println(△);} }public class Flower extends Shape{Overridepublic void draw() {System.out.println(❀);} }public static void main(String[] args) {String[] array {Triangle,Circle,Circle,Flower};for(String shape:array) {if(shape.equals(Triangle)) {System.out.println(△);} else if(shape.equals(Circle)) {System.out.println(○);} else if (shape.equals(Flower)) {System.out.println(❀);}}}如果使用多态就可以简化为 public class Shape {public Shape shape;public void draw() {System.out.println(画一个图形);} }public class Circle extends Shape{Overridepublic void draw() {System.out.println(○);} }public class Triangle extends Shape{Overridepublic void draw() {System.out.println(△);} }public class Flower extends Shape{Overridepublic void draw() {System.out.println(❀);} }public static void main(String[] args) {Shape[] array {new Triangle(),new Circle(),new Circle(),new Flower()};for(Shape shape:array) {shape.draw();} }以子类对象为数组元素通过for循环调用draw函数打印相应的图案 可扩展能力更强 以上面打印图案为例如果要新增一种新的形状使用多态的方式代码改动成本也比较低 缺陷 属性没有多态性 当父类和子类都有同名属性的时候通过父类引用只能引用父类自己的成员属性构造方法没有多态性 注意不要在构造方法里面调用重写的方法因为会发生动态绑定调用子类重写的方法但此时子类还没构造完成可能会出现一些极难被发现的问题 写在最后 以上就是本篇文章的全部内容如果你觉得本文对你有所帮助的话那不妨点个小小的赞哦比心
http://www.hkea.cn/news/14500736/

相关文章:

  • 深圳建专业网站互联网网站建设
  • 网站执行速度惠州行业网站设计方案
  • 做网站的像素是多少钱vs简易新闻建设网站
  • 做流媒体视频播放网站求助logo设计免费网址
  • ps网站logo制作教程长沙棋牌软件制作开发
  • 2018什么做网站国美电器如何进行网站的建设与维护
  • 义乌做公司网站东莞外贸建站及推广
  • 江苏省建设局网站首页来个网站吧好人一生平安
  • 东莞家具网站建设wordpress相册点击弹出
  • 网站建设费 科目化州网站开发公司
  • 如何做网站购物车海南住建部建设网站的网站
  • 旅游网站建设和实现巧克力网站模板
  • 无锡网站建设哪家做的比较好佛山网站营销
  • 张家界网站定制福建企业seo推广
  • 个人网站做多久有效果最大的购物平台
  • 专业做网站哪家便宜潍坊网站制作保定公司
  • 专业手机网站建设公司如何建设移动端网站
  • 在深圳做网站时代设计网 新网站
  • 余姚专业做网站公司网站外链建设记住5种外链方式不可用
  • 芜湖新芜湖网站建设手机wordpress加载图片慢
  • WordPress站点地址填错北京的互联网企业
  • 做哪一类网站能赚钱免费平面设计软件有哪些
  • 佛山外贸网站设计公司wordpress下载网站
  • 昆山建设工程安监站网站百度智能小程序是什么
  • 六安市城乡和建设局官方网站wordpress服务器如何使用
  • 学校网站建设实施方案国际设计公司logo
  • 企业进行网站建设的方式深圳网络推广代运营
  • 简单的个人网站制作流程网站制作ppt模板
  • 做网站第三方登录怎么弄营销型网站模板免费下载
  • 包头 网站建设win2008r2做网站服务器