原标题:Java基础————Java多态
什么是多态呢?从字面上的意思去理解,就是多种形态,实际上呢,也就这么回事儿。
Java的多态有很多,我们直说一下,最常见的,方法的多态。
首先,来一段范例程序:
从上面的程序,可以看到,我写了4个名为test的方法,名字是一样的,不一样的只有参数和返回类型。这就是Java多态的一种表现形式。
这里要说一点,Java里面是不允许有相同的方法的。
那既然方法名都一样,那Java是怎么去判断这几个方法不一样的呢?
很简单,从源代码上面就能看出,只有方法名相同,参数类型和返回类型都是不同的,那Java是根据这个来判断的吗?(参数类型+返回类型+方法名) = 判断依据????对吗????
我们再看一个源码:
从这上面就能看到,报错了。为什么呢?我的返回类型是不一样的啊。其实这里很好理解,如果我们光看源代码,这两个方法确实有不一样的地方但如果我们调用的时候呢?
请问,哪一个是有返回值的,哪一个是没有返回值的?我们写的时候知道,但编译器编译的时候可不知道,它并不是我们肚子里的蛔虫。既然编译器它不知道是哪一个方法,那怎么办?结果只有报错咯。
所以说,使用返回类型来判断,是不可取的。那就是剩下的那几种组成了判断的依据吗?我们可以一个一个的尝试,我这里就偷懒,不试了,明确的说,Java判断方式是都一样的依据就是(方法名+参数类型)
这个判断的依据在Java中被称之为“方法签名”。
不过这里需要强调一点的是,我们刚才说的是参数类型,是类型!而不是参数。他们是有区别的。参数指的的参数本身。嗯,最简单的就是看代码:
报错了,简单一点来说就是。在方法签名的组成里,关于参数的,它只需要参数类型,也就是上面代码中String,什么参数名字,是否为不可变的,什么的一大堆,他都不管。这个也很好理解,
我们在调用的时候,这样写,那编译器怎么知道该调用哪一个方法呢?你又没写名字。
这是一个原因,还有一个原因就是。在Java1.7还是1.8,记不太清楚了,反正就是再这之前的Java版本,编译为字节码之后,参数名是会变化的。无论你写的名字是test、test1、tttt还是什么的,都会统一的根据顺序变为:arg0,arg1,arg2,arg3......
所以,方法签名中,要的只是参数类型,只要类型一样,他就默认的认为是同样的参数。
好了,多态我就讲这些东西。关于多态,还有很多的知识点,有兴趣的可以百度,我只讲了最常见的,最基本的。返回搜狐,查看更多
责任编辑: