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

建设优惠券网站搜索推广渠道

建设优惠券网站,搜索推广渠道,资源采集网站如何做,程序员培训学费目录 1、多态的概念2、多态的条件3、向上转型3.1 概念3.2 使用场景 4、向下转型5、多态的优缺点 1、多态的概念 多态,通俗来讲就是多种形态,即对于同样的行为,不同的对象去完成会产生不同的状态。比如动物都会吃东西,小狗和小猫都…

目录

  • 1、多态的概念
  • 2、多态的条件
  • 3、向上转型
    • 3.1 概念
    • 3.2 使用场景
  • 4、向下转型
  • 5、多态的优缺点

1、多态的概念

多态,通俗来讲就是多种形态,即对于同样的行为,不同的对象去完成会产生不同的状态。比如动物都会吃东西,小狗和小猫都是动物,但是小狗是吃狗粮,而小猫是吃猫粮。

在这里插入图片描述

2、多态的条件

在 Java 中实现多态需要满足下述条件,缺一不可:

  1. 必须在继承体系下。
  2. 子类对基类的方法实现重写(即方法原型相同,但实现体不同)。
  3. 通过基类的引用调用重写的方法。

多态的体现:在代码运行时,当传递不同类的对象时,会调用对应类中的方法。

举例说明:Animal 类是父类,Dog 类和 Cat 类是子类,继承自 Animal 类,同时 Dog 类和 Cat 类对 Animal 类的方法进行了重写。

// 父类
public class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}public void eat(){System.out.println(name + "在吃饭");}public void bark(){System.out.println(name + "在大叫");}
}// Dog 类:继承自 Animal 类
// 1. 在继承体系中
public class Dog extends Animal{protected String color;public Dog(String name, int age, String color) {super(name, age);this.color = color;}// 2. 对父类方法进行重写@Overridepublic void eat() {System.out.println(name + "在吃狗粮");}@Overridepublic void bark() {System.out.println(name + "汪汪汪~");}public void sleep(){System.out.println(name + "在睡觉");}
}// Cat 类:继承自 Animal 类
// 1. 在继承体系下
public class Cat extends Animal {protected String temper;public Cat(String name, int age, String temper) {super(name, age);this.temper = temper;}// 2. 对父类方法进行重写@Overridepublic void eat() {System.out.println(name + "在吃猫粮");}@Overridepublic void bark() {System.out.println(name + "喵喵喵~");}public void drink(){System.out.println(name + "在喝水");}
}

根据上述类,利用 Animal 类的引用调用被重写的方法从而实现多态。

public class Test {public static void method(Animal animal){// 3. 通过基类的引用调用被重写的方法// 在 method() 方法中利用 Animal 对象的引用调用被重写的方法// 在程序的编译阶段并不知道会调用哪个子类的对象所对应的方法// 只有在运行阶段给 method() 方法传参时才知道。animal.eat();animal.bark();}public static void main(String[] args) {Dog dog = new Dog("毛毛", 5, "白色");method(dog);Cat cat = new Cat("小七", 1, "乖巧");method(cat);}
}

运行结果:

在这里插入图片描述
由上述代码可知,虽然在 main 方法中调用的是同一个 method() 方法,但是运行的结果却不同。这是因为 Animal 类是 Dog 类和 Cat 类的基类,基类可以引用不同子类的对象,因此传递给形参 animal的值会出现不同,当传递的是 Dog 类的对象时,会调用 Dog 类中的方法,当传递的是 Cat 类的对象时,会调用 Cat 类中的方法。
当程序员在编写 method() 方法时并不知道也不关心形参 animal 指的是 Cat 类还是 Dog 类的对象,只有当代码运行起来,实参传递给形参值的时候才知道。形参 animal 调用方法会有不同的表现,这种行为就称作多态。

3、向上转型

3.1 概念

向上转型,实际上是创建一个子类对象,当作父类对象来使用。

Animal animal = new Dog(“毛毛”, 5, “白色”);

animal 是父类类型,可以引用子类对象,因为狗和猫都是动物,这是从小范围到大范围的转换,是安全的。但是向上转型之后,无法通过父类的引用调用子类新增的成员方法。

在这里插入图片描述

3.2 使用场景

向上转型有以下三种使用场景:

  1. 直接赋值:子类对象赋值给父类对象。
Animal animal = new Dog("毛毛", 5, "白色");
  1. 方法传参:形参为父类型引用,可以接收任意子类的对象。
public class Test {// 将 Dog 类和 Cat 类对象的引用传参给 Animal 类的引用public static void method(Animal animal){animal.eat();animal.bark();}public static void main(String[] args) {Dog dog = new Dog("毛毛", 5, "白色");method(dog);Cat cat = new Cat("小七", 1, "乖巧");method(cat);}
}
  1. 方法返回:方法返回类型是父类类型,可以返回任意子类对象。
    public Animal buyCat(){// 创建 cat 对象并返回Cat cat = new Cat("小七", 1, "乖巧");return cat;}

4、向下转型

将子类对象转换为父类时,会无法调用子类中特有的方法,但是有时候需要调用,那么此时将父类引用还原为子类对象即可,即向下转换。

    public static void main(String[] args) {Animal animal = new Dog("毛毛", 5, "白色");// 将 Animal 类型对象强转为 Dog 类型,此时可以调用 sleep() 方法Dog dog = (Dog) animal;dog.sleep();}

但是向下转型很容易出现问题。

在这里插入图片描述
Java 中为了提高向下转型的安全性,引入了 instanceof。

instanceof 类名N:实际引用的是否为 N 类的对象,如果是返回true,否则返回false

如果该表达式为真,则可以安全转换,否则不能进行安全转换。

	public static void main(String[] args) {Dog dog = new Dog("毛毛", 5, "白色");Cat cat = new Cat("小七", 1, "乖巧");Animal animal = cat;animal = dog; // 此时 animal 实际指向的是 Dog 类的对象if(animal instanceof Cat){cat = (Cat)animal;cat.drink();}if(animal instanceof Dog){dog = (Dog)animal;dog.sleep();}}

运行结果:

在这里插入图片描述
由上述结果可知,由于 animal 实际指向的是 Dog 类的对象,因此执行第二个 if 语句块,将 animal 强转为 Dog 类型对象,此时就可以调用 Dog 类中新增的成员方法。

5、多态的优缺点

【优点】

  1. 降低代码的“圈复杂度”,即避免大量使用 if-else。
  2. 可扩展能力更强。

【缺点】

  1. 代码的运行效率降低。
  2. 属性没有多态性:当子类和父类有同名属性时,通过父类引用,只能引用父类自己的成员属性。
  3. 构造方法没有多态性。

文章转载自:

http://6YkmgURI.bfjtp.cn
http://eyM1lzL8.bfjtp.cn
http://mxz3Hu5N.bfjtp.cn
http://vEybAYuG.bfjtp.cn
http://Xc8Fnpku.bfjtp.cn
http://0rXiepVN.bfjtp.cn
http://SwL7WswG.bfjtp.cn
http://ExAgu7Js.bfjtp.cn
http://97dmbkXI.bfjtp.cn
http://AGaZEdIV.bfjtp.cn
http://huCkeFIe.bfjtp.cn
http://E741oHtf.bfjtp.cn
http://Jp2WSFk5.bfjtp.cn
http://1Ehs7Pta.bfjtp.cn
http://ZgTN0Pe9.bfjtp.cn
http://pGHoOtG4.bfjtp.cn
http://LVwWVPDl.bfjtp.cn
http://5kp7DHZp.bfjtp.cn
http://HGhxuPza.bfjtp.cn
http://K1zuj2tD.bfjtp.cn
http://3O1Peftp.bfjtp.cn
http://0WMD33iO.bfjtp.cn
http://yMxJQTap.bfjtp.cn
http://znGmcn7A.bfjtp.cn
http://xft05ICg.bfjtp.cn
http://cpyqwz5K.bfjtp.cn
http://yIgdcKQq.bfjtp.cn
http://Wsi7RpF7.bfjtp.cn
http://f34uswsS.bfjtp.cn
http://pBRs2EuI.bfjtp.cn
http://www.dtcms.com/wzjs/736081.html

相关文章:

  • 网站服务器排名前十vuejs 可做网站吗
  • 程序员做网站如何赚钱网站商城
  • 网站建设与管理案例教程第三版答案云南网站建设优化企业
  • 网站建设与维护很累吗wordpress菜单分类目录
  • 网站风格设定校园门户网站建设实施方案
  • 莆田外贸建站广州网络推广万企在线
  • 自建网站成都权威的手机网站制作
  • 亚马逊网站网址app开发技术路线
  • 六安做网站的公司网站微信二维码悬浮
  • 网站越来越难做中山建设监理有限公司 网站
  • 个人网站制作流程青岛网站建设运营推广
  • 一个人做网站要多久网站可以做软著吗
  • 建站程序下载西地那非的作用与功效
  • 安联建设集团股份公司网站上海 建筑
  • lnmp wordpress网站长春网站制作可选吉网传媒好
  • 一个旅游网站建设需求分析办个公司需要多少钱
  • 教育门户网站系统建设方案免费微网站哪个好用
  • 站长工具域名查询社区网站建设报价单ppt
  • 代做网站名称优化个人做论坛网站有哪些
  • 常州做网站推广小波app推广网
  • 传统网站网站音乐网站开发书籍
  • 从0建设一个网站珠海网站建设公司
  • 企业建设网站作用建筑工人找活的平台
  • 建设教育局官方网站毕业答辩ppt模板免费下载网站
  • google官网浏览器优化型网站建设的基本要求
  • 嘉兴网站建设解决方案做淘宝客网站需要做后台吗
  • php网站开发个人职责合肥建站企业
  • 学校网站建设先进个人荣誉seo网站提交
  • 建一个网站的程序博物馆网站建设方案
  • 昆明网站建设技术研发中心外贸网站违反谷歌规则