黑马程序员技术交流社区
标题:
函数重载和函数重写是怎么体现面向对象的多态性的
[打印本页]
作者:
不愿一人
时间:
2013-12-29 00:43
标题:
函数重载和函数重写是怎么体现面向对象的多态性的
今天晚上又重新看了下以前的java笔记,看到这句话,
函数重载和函数重写体现了面向对象的多态性,
但是却忘了怎么体现的了?请大神帮忙啊
作者:
刘旭升
时间:
2013-12-29 01:36
重载容易理解,就是方法名一样,参数不一致。名字上的多态。
重写就是多个子类都重写了父类的一个方法,然后不同对象在调用这个方法时就会产生不同行为。也就体现了多态。比如:
父类是animal 有个方法 cry();
子类猫重写cry(){sop(喵喵~~);};
同时另一个子类狗也重写了cry(){sop(汪汪~~)};
那么他们的对象在调用cry()时就会产生不同的行为。。。{:soso_e113:}
作者:
胡永城
时间:
2013-12-29 03:09
我的帖子: 从方法的重载与重写(覆盖)处看多态
http://bbs.itheima.com/thread-102602-1-1.html
专业解决多态问题
作者:
tuanjie
时间:
2013-12-29 09:44
多态性:
方法的重载和覆写
方法的覆写:子类定义了与父类中同名的方法,覆写方法时需要考虑权限,即被子类覆写的方法不能拥有比父类更严格的访问权限。
方法的覆写一般是当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。
方法覆写时应遵循的原则:
方法的签名必须相同(方法的签名指方法名和方法的参数列表,方法的参数列表包括方法的参数类型,参数个数,参数顺序)
子类方法的返回值类型比父类方法的返回值类型级别更小或者相等
子类方法声明抛出的异常比父类方法声明抛出的异常级别更小
子类方法的访问权限比父类方法的访问权限级别更大
怎样判断方法是否覆写了:
判断子类方法是否覆写父类方法,可以在子类方法前加上@Override,如果编译能通过,表明是方法覆写。
方法的重载:
在同一个类中,允许存在一个以上的同名方法,只要方法的参数个数或者参数类型,或者参数顺序不同,即是方法的重载。方法的重载与方法的返回值类型无关
方法重载应遵循的原则
在同一个类中
方法名相同
方法的参数列表不同(方法的参数列表包括方法的参数类型,参数个数,参数顺序)
对象的多态行:编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定,如果编译时类型和运行时类型不同,就出现多态。
实现多态的机制:
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
多态的作用:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。只修改方法的实现,不必修改方法的声明,继承是多态产生的前提条件。
分类:
编译时多态:方法重载
运行时多态:方法覆写
多态时的方法调用:
当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况):此时该变量不能再访问子类中自己特有的字段和方法;若子类覆写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法;
作者:
Zenith
时间:
2013-12-31 13:43
多态的前提是:A:要有继承或者实现关系。B:要有方法的重写。C:要有父类引用或者父接口引用指向子类对象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2