王永峰:JAVA面向对象的多态是个什么东西?

- 编辑:生活小常识 -

王永峰:JAVA面向对象的多态是个什么东西?

王永峰:JAVA面向对象的多态是个什么东西?

  面向对象的三大特征:封装、继承、多态。在前面已经说了过了封装和继承。今天就来聊聊剩下的多态。

  多态,从字面内容来看,就是多种形态,多种状态。在java的面向对象中可以从以下两个方面来讲。

  01不同子类之间的多态

  在前面我们说继承的时候说到,子类可以继承到父类的方法,继承后可以对方法进行重写。这个时候就会有不同的子类重写的功能是不同的。

  我们来举个例子,父类是动物类,有一个叫的方法。然后定义两个子类继承自这个父类,一个猫类、一个狗类。他们分别对叫的方法做了重写,猫类重写叫的方法是发出“喵喵”声,而狗类重写叫的方法是发出“汪汪”声。于是我们同样创建的动物的对象,同样调用这个动物对象叫的方法,如果这个动物对象是猫,则会发出“喵喵”声,而如果这个动物对象是狗,发出的声音则成了“汪汪”。这就是不同之类之间体现出来的多态。

  在代码上体现就是方法名称,参数,返回值完全与父类相同,而不同的子类在方法体内的代码逻辑不同。

  02同一个类中的多态

  同一个类中的多态指的是,同一个类中同样的方法,在调用的时候因为传入的参数个数不同、类型不同,而执行的功能不同。这其实就是重载。

  再来举个例子,一个类中,同样是加法的方法,一个是传入两个数字,一个是传入三个数字。因为方法内部的实现不一样,第一个方法是将传入的两个数字相加返回;而第二个方法是将传入的三个数字相加返回。

  这里有个新人经常会犯的错误,大家来看看下面这两个方法算不算重载。

  public int add(int a,int b){}

  public int add(int c,int d){}

  这两个方法其实不是重载,是不是重载关键是方法名相同,参数的类型顺序,个数不同,与参数的名称没有关系。

  再看看下面这两个方法算不算重载。

  public void methodA(int a,Stirng b){}

  public void methodA(String a,int b){}

  这两个方法放在一个类中是算重载的,因为他们的方法名相同,参数的类型顺序是不同的。

  03总结

  我们来总结一下,java的面向对象的多态就是通过重写实现的不同子类表现出来的多态,还有通过重载实现同一个类中相同方法名的不同方法体现出来的多态。

  北京昨天和今天都公布有新冠肺炎确诊病例,大家一定要好好保护自己啊


王永峰:JAVA面向对象的多态是个什么东西?