Day11 面向对象——多态
我们来复习一下面向对象的三大特性分别是什么,面向对象拥有的三大特性分别为
继承、封装、多态。继承我们也已经学过了,就是父类和子类、封装其实也学过了其实就是访问修饰符和包,主要的作用为更好的封装我们接下来要讲的多态则是面向对象的最难点,他要基于继承进行的
第一章 多态基础——动态绑定机制
首先我们想要知道多态要怎么实现,多态的实现其实也非常的简单,只需要满足三个条件即可,第一个就是 有继承关系,第二个就是有重写的方法,第三个就是
父类引用指向子类对象,我知道你们突然懵了,但你们先别急,我来解释解释
首先我们来说说什么是父类引用指向子类对象,那么我们先来看看正常的对象什么,因为及时有继承我们也是使用子类进行创建对象的嘛
Hello hello = new Hello();
这个就是正常的对象创建对吧,但是我们现在来一点条件,比如现在有一个父类叫做Father然后我们的Hello类就继承这个Father,那我们现在创建的hello对象里面是不是有身为父类的Father里面的方法。
那我们现在换一个操作来声明,然后我们再确定一下,Hello是子类对吧,然后Father是父类,Hello extends Father。
我们就可以这么写就可以达成父类引用指向子类对象 Father hello = new Hello()
大家也可以自己使用之前的代码进行尝试一下,编译是不会出现问题的,但是会出现一个问题,就是你没有进行重写的时候想要调用子类中的方法是不可能的,我们来举个栗子
public class Hello extends Father {
public static void main(String[] args) {
Father hello = new Hello();
hello.p();
}
public void p1() {
System.out.println("我是子类中的方法p1()");
}
}
class Father {
public void p() {
System.out.println("我是父类中的方法p()");
}
}
我们明显可以看到这里报错了,自然是运行不了的,我们来看看问题出在哪里,还记得我说的吗,想要完成多态就要经历三个,一个是 继承,一个是
重写,还有一个就是 父类引用指向子类对象,1和3条件都有了但是没有重写,所以没有完成多态,我们继续编写一下代码,让他拥有重写,然后就会形成多态
public class Hello extends Father {
public static void main(String[] args) {
Father hello = new Hello();
hello.p();
}
public void p() {
System.out.println("我是子类中的方法p()");
}
}
class Father {
public void p() {
System.out.println("我是父类中的方法p()");
}
}
是不是就调用了重写之后的方法,这里就要讲到多态的一个特性了,首先我们需要重写,重写完了之后呢,我们需要在父类中使用一个方法调用这个被重写的方法完成真正的多态
public class Hello extends Father {
public static void main(String[] args) {
System.out.println("首先声明,现在是使用p2的情况");
Father hello = new Hello();
hello.p2();
}
public void p() {
System.out.println("我是子类中的方法p()");
}
}
class Father {
public void p() {
System.out.println("我是父类中的方法p()");
}
public void p2() {
p();
}
}
看到区别了吧,我们使用p2,然后p2调用了p,但这个时候的p并不是父类方法里面的p,而是子类里面的p,这个就是多态,神不神奇
标签:11,Java,子类,void,Father,多态,父类,public From: https://blog.csdn.net/XingZaiUnrivaled/article/details/142871217