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

南通装饰网站建设网页设计与制作代码成品

南通装饰网站建设,网页设计与制作代码成品,烟台网站排名优化费用,用JSP做电商网站这篇文章,我们来介绍一下java的多态 目录 1.多态概述 2.多态调用成员的特点 3.多态的优势与弊端 4.instanceof 关键字 5.小结 1.多态概述 我们先来回顾一下前面的知识 利用封装,我们可以将一些零散变量和方法包装起来,这样要用时就直…

这篇文章,我们来介绍一下java的多态

目录

1.多态概述

2.多态调用成员的特点

3.多态的优势与弊端

4.instanceof 关键字

5.小结


1.多态概述

我们先来回顾一下前面的知识

利用封装,我们可以将一些零散变量和方法包装起来,这样要用时就直接利用对象来调用里面的变量和方法。而当我们的对象原来越多的时候,有些代码就会重复,所以,我们将这些重复的代码提取出来,封装成一个类,叫做父类,然后其余的类继承它,这就是继承。

那什么时候用到多态呢?

我们可以思考下面这样的一个场景。我们有一个学生管理系统,里面有老师,学生,管理员三种类型的User;我们有一个注册功能,就是一个方法,我们需要给这个方法传一个参数,请问,传什么参数??老师?那只能实现老师注册;学生?那也只能实现学生注册;有人说,我们可以写三个方法啊,麻烦吗?很麻烦。那如果我再增加一个角色:辅导员,你是不是也要写一个辅导员的方法?很显然,这是不现实的。

怎么办呢?用多态!就是创建这些User类型的共同父类,这样不管来什么对象都可以接收

什么是多态?

同种类型的对象,表现出的不同形态

解释:

对象,我们知道,new出来的表现形态就是引用,不同的表现形态,就是不同的引用;也就是说同一种的对象,它可以赋值给不同的引用

多态的表现形式:

父类类型 对象名称 = new 子类对象;

多态的前提:

  1. 有继承或实现关系
  2. 有父类引用指向子类对象 (Fu f = new Zi() )
  3. 有方法的重写

多态的好处:

  1. 使用父类型作为参数可以接收所有子类对象
  2. 体现多态的扩展性和遍历

说点题外话:

  1. 什么是引用?就单纯的面对对象而已,引用就是你的对象名,对,对象名仅仅是个引用,实体是你new出来的对象。对象名只是方便对对象的引用
  2. 什么是对象?new出来的东西
  3. 那多态到底咋用?其实说白了,就是给你的对象换一个类型的名称而已,只不过换的时候有些要求(即多态的前提),但是它实质是还是你new出来的那个对象,因为它堆内存中存的还是你new出来的对象,我们不管它是啥类型,我们只管它的本质是啥

2.多态调用成员的特点

下面,我们来看一下java中多态调用成员的特点

口诀:

变量调用:编译看左边,运行也看左边

方法调用:编译看左边,运行看右边

下面,我们根据代码来看一下:

具体的分析在上面的注释中都写了。

其实还是要理解继承。继承是子类继承了父类的方法和成员,意思就是父类中有的子类中也有(不考虑权限修饰符),而我们调用出来的时候,是怎么区分的呢?根据引用的类型来区分的。同理,前面讲继承的时候也说过,子类重写父类的方法会覆盖掉父类原有的方法(在虚方法表中),这样一想,就更好的理解多态的调用了。

3.多态的优势与弊端

 多态的优势:

  1. 在多态形式下,右边对象可以实现解耦合,便于扩展和维护
  2. 定义方法的时候,使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利

对1的解释:

    Person p = new Student();p.work; //业务逻辑发生改变时,后续代码无需修改

现在我们的代码是这个,第二天,我想让老师工作,那就只需要把 new Student( )改为 new Teacher( )就行,其余的无需修改。但是,如果你写的是Student s = new Student(),那么你后面就需要修改很多处,因为后面的所有对象都是Student类型的,也只能调用Student的方法。

对2的解释:

看一下代码:

如果不想用Object也行,那就写8个方法,对应8中类型吧

多态的弊端:不能使用子类中特有的功能

如下图所示:

解决方案:类型转换

如下图所示:

引用数据类型的类型转换的方式:自动类型转换,强制类型转换

强转解决的问题:

  1. 可以转换为真正的子类类型,从而调用子类独有的功能
  2. 转换类型和真实对象类型不一致会报错
  3. 转换的时候用 instanceof 关键字进行判断

4.instanceof 关键字

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

instanceof
instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。

这里说明下:

  1. 类的实例包含本身的实例,以及所有直接或间接子类的实例
  2. instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误

instanceof用法

1.左边的对象实例不能是基础数据类型

2.左边的对象实例和右边的类不在同一个继承树上 

3. null用instanceof跟任何类型比较时都是false 

代码示例

public interface A {
}public class B implements A{}public class C extends B{
}

 测试代码示例

public class InstanceofTest3 {public static void main(String[] args) {A a = null;B b = null;boolean result;result = a instanceof A;System.out.println(result); // 结果:false null用instanceof跟任何类型比较时都是falseresult = b instanceof B;System.out.println(result); // 结果:false null用instanceof跟任何类型比较时都是falsea = new B();b = new B();result = a instanceof A;System.out.println(result); // 结果:true a是接口A的实例对象引用指向子类类B,类B实现了接口A,所以属于同一个继承树分支result = a instanceof B;System.out.println(result); // 结果:true a是接口A的实例对象引用指向子类类B,类B实现了接口A,所以属于同一个继承树分支result = b instanceof A;System.out.println(result);// 结果:true b是类B的实例对象,类B实现了接口A,所以属于同一个继承树分支result = b instanceof B;System.out.println(result);// 结果:true b是类B的实例对象,类B实现了接口A,所以属于同一个继承树分支B b2 = new C();result = b2 instanceof A;System.out.println(result); // 结果:true b2是父类B引用指向子类C,类B实现了接口A,所以属于同一个继承树分支result = b2 instanceof B;System.out.println(result); // 结果:true b2是父类B引用指向子类C,所以属于同一个继承树分支result = b2 instanceof C;System.out.println(result); // 结果:true b2是父类B引用指向子类C,所以属于同一个继承树分支}
}

instanceof应用场景

instanceof一般用于对象类型强制转换

public class C extends B {private void print(Object a) {System.out.println(a+" instanceof");}public void convert(String b) {if (b instanceof Object) {this.print(b);}}}
public class InstanceofTest4 {public static void main(String[] args) {C c = new C();c.convert("aa");}
}

输出结果: 

aa instanceof

5.小结

这篇文章,我们主要介绍了多态,一句话:父类引用指向子类对象。话很短,但包含的信息很多,要理解。除了多态,我们还介绍了一下java中的 instanceof 关键字,也是很简单的用法。

http://www.wooajung.com/news/34318.html

相关文章:

  • 做网站哪家公司好苏州全国防疫大数据平台
  • 北京网站建设公司资讯自己做网站
  • 怎么做国际网站949公社招聘信息
  • 苏州汇聚人电子科技有限公司如何优化搜索引擎的搜索功能
  • 扬州做机床公司网站百度的特点和优势
  • 免费虚拟主机vps陕西seo推广
  • 网站日记在哪里看产品宣传方案
  • 供应链金融网站开发seo快速优化文章排名
  • 天津如何做百度的网站互联网销售
  • 建设银行网站logo郑州怎么优化网站排名靠前
  • 企业的网站一般做哪些维护最经典最常用的网站推广方式
  • 专业科技网站建设网络营销的营销策略
  • 做受免费网站天津seo霸屏
  • 公司网站如何上传视频优化手机性能的软件
  • 外国做动漫图片的网站叫什么网站排名优化推广
  • 企业内部管理网站建设计划网站优化推广外包
  • 那家财经网站做的好网站域名解析
  • ipv6改造网站怎么做站长平台官网
  • 做外贸 网站没有邮箱怎么找怎样推广自己的商城
  • 男女做性哪个的小视频网站国内推广平台
  • 做ppt一般在什么网站bing搜索
  • 克拉玛依建设局网站6宁波百度快照优化排名
  • 包头企业网站建设公司今日十大新闻
  • 用阿里云服务器做盗版小说网站吗百度资源搜索
  • 南京建站推广公司什么叫软文
  • 服装定制品牌有哪些优化设计官网
  • 济南哪里做网站好北京网络营销推广外包
  • 关于网站建设的专家研讨会app下载注册量推广平台
  • 台州网站seo网站推广手段
  • 网上做网站广告投放免费b2b网站推广有哪些