java面向对象之多态
多态的简单理解:
student类继承了Person类,则student类的对象既是student又是person类
多态性具有两种展现的形式:
1.方法的多态性:
(1)方法的重载:同一个方法可以根据传入的参数的类型或者个数的不同实现不同的功能
(2)方法的覆写:同一个方法可能根据实现子类的不同有不同的实现
2.对象的多态性:
父类与子类实例之间的转换处理
(1)对象向上转型:父类 父类实例 =new 子类实例();自动完成转换
(2)对象向下转型:子类 子类实例 =new (子类)父类实例();强制完成转换
相关视频教程分享:java免费视频教程
多态的最终体现:
1.为父类引用变量可以指向子类对象
2.多态的前提是必须有子父类关系或者类实现接口关系,否则无法实现多态
3.在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法
多态的成员变量:
1.编译的时候,参考父类中哟没有这个变量,如果有就编译成功,如果没有就编译失败
2.运行的时候,运行的是父类中的变量值
成员变量编译运行皆看父类
多态的成员方法:
1.编译的时候,参考父类中有没有这个方法,如果有就编译成功,如果没有就编译失败
2.运行的时候。运行的是子类的重写方法
成员方法编译看父类,运行看子类
对象的两种转型方式的理解:
1.对象向上转型:
向上转型之后,子类对象只能调用父类拥有的方法,不能调用子类独自拥有的方法,通过向上转型实现多态性的使用
2.对象向下转型:
如果对象向上转型之后想要使用子类独有方法而父类没有的方法,需要使用对象的向下转型
代码演示:
public class Person { public void Eat(){ //在person类中定义一个吃的抽象方法 } } public class Student extends Person{ public void Eat(){ System.out.println("学生吃学校食堂");//重写父类中的抽象方法 } public void Learning() { System.out.println("学生在学习");//定义一个student类特有的方法 } } public class Test { public static void main(String[] args) { // TODO 自动生成的方法存根 Person p=new Student();//通过向上转型定义一个p对象 p.Eat();//这是子父类共有的方法 p.Learning(); } }
在这个代码中我们通过向上转型调用了一个子类特有的方法,但是会提示如下图:
父类中没有定义Learning方法。但是我们又必须调用子类的特有的方法,此时就需要通过向下转型来实现
补充代码如下:
Student stu=(Student)p;//将p对象向下转型实现方法调用 stu.Learning();
想学习更多相关教程请访问:java快速入门