原文:http://skyuck.iteye.com/blog/764696
Override(重写)是子类与父类的一种多态性体现。
Override允许子类改变父类的一些行为。
为什么需要Override:当父类不满足子类的一些要求时我们就需要子类对父类的一些行为进行重写。
例如:某公司里的员工的电话号码不允许对外公开,而销售人员(员工)的电话号码则需要对外公开。
这时我们就可以这样做:
- public class Employee {
- private String mobile;
- public Employee(String mobile) {
- this.mobile = mobile;
- }
- protected String showMess(){
- return "电话号码:"+mobile;
- }
- }
员工类的showMess方法是protected的,所以位于其他包的对象是访问不到的。
然后定义一个销售人员的类(Sales),并继承Employee类
- public class Sales extends Employee{
- //子类除了具有父类的一些属性,也可以有自己的一些属性
- private String msn;
- public Sales(String mobile,String msn) {
- super(mobile);
- this.msn = msn;
- }
- @Override
- public String showMess() {
- return super.showMess()+"==msn:"+this.msn;
- }
- }
注意这时被覆盖的showMess方法的访问级别是public,可以被任何其他对象访问到。
关于Override有几点要注意的地方:
1.被覆盖方法的访问控制级别可以不一样。
例如上例父类的showMess方法的访问级别为protected的,而子类覆盖的showMess方法访问级别则为public的。
但子类的访问级别必须要高于父类被覆盖方法的访问级别,如果父类是public的而子类是protected的则是错误的。
2.方法被定义为private或static或final的则不能被覆盖。
3.方法的返回类型:子类的返回类型可以是更具体的对象,例如可以将Employee类的返回类型改为Object也正确。而倒过来则错误。
4.在方法调用时先会在子类中找覆盖的方法,如果子类中没有则会在父类中去找。
- public class Parent {
- private int num(int i,int j){
- return i+j;
- }
- public static void main(String[] args) {
- Parent p = new Child();
- System.out.println(p.num(1, 2));
- }
- }
- class Child extends Parent{
- public int num(int x,int y){
- return x-y;
- }
- }
这段代码的执行结果为什么呢?如果你回答-1则错了,正确答案是3。
为什么呢?因为父类的num方法是private的,所以不能被覆盖,所以子类的num方法不是一种Override,因此在子类找不到被覆盖的num方法就会执行父类的num方法。所以结果输出为3.
- public class Parent {
- public int test(){
- //执行子类的num方法
- return num(1,2);
- }
- protected int num(int i,int j){
- return i+j;
- }
- public static void main(String[] args) {
- Parent p = new Child();
- System.out.println(p.test());
- }
- }
- class Child extends Parent{
- public int num(int x,int y){
- return x-y;
- }
- }
那么这段代码的执行结果是-1,因为父类test方法调用的是子类的num方法。
相关推荐
Java多态是面向对象编程中的一个核心特性,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要通过继承、接口和方法重写(Override)来实现。这里我们将深入探讨从虚拟机(JVM)的角度来看,Java...
本篇将深入探讨Java多态中的类型转换,包括向上转型(Upcasting)和向下转型(Downcasting),以及相关的注意事项。 1. **向上转型(Upcasting)** 向上转型是指将子类的对象引用赋值给父类的引用。在Java中,这是...
多态在Java中有着深远的影响,它提高了代码的可重用性、灵活性和可扩展性。本篇将通过一个经典例子深入解析多态的含义,并通过实际代码展示其应用。 首先,我们要理解多态的定义。在Java中,多态性(Polymorphism)...
Java多态是面向对象编程中的一个核心概念,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要体现在方法的重写(Override)和重载(Overload)。通过多态,我们可以编写出更加灵活、可扩展的代码...
Java多态的实现机制 Java 多态的实现机制是面向对象程序设计中代码重用的一个重要机制。多态性是 Java 的三大属性之一,在开发中很重要的一个环节。多态性使对象能够调用正确的方法版本,从而提高代码的重用性和...
多态性分为编译时多态和运行时多态,其中运行时多态是Java中最常见的形式,也称为动态绑定。在深入探讨Java中多态的内存分析之前,我们需要先理解一些基本概念。 首先,了解Java内存模型至关重要。Java程序运行时...
### Java多态机制详解 #### 一、引言 多态是面向对象编程的重要特性之一,它使得程序设计更加灵活且易于扩展。Java作为一种广泛使用的面向对象编程语言,其多态机制是理解Java编程的关键所在。本文将详细介绍Java...
Java多态实现是面向对象编程中的一个核心概念,它允许我们使用父类的引用变量来指向子类的对象,从而在运行时决定所调用的方法。这一特性极大地增强了代码的灵活性和扩展性,使得代码能够更好地应对未来的需求变化。...
### Java多态的深度剖析 #### 什么是Java多态? 多态是面向对象编程的一个核心概念,它允许我们在程序设计中使用一个通用的接口来表示不同的类型或行为。具体而言,在Java中,多态指的是“父类型的引用可以指向子...
在Java编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用一个接口来代表多种类型的对象,这使得代码更加灵活、可扩展且易于维护。在这个主题中,我们将...
在Java编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用一个接口来代表多种不同的类,这使得代码更加灵活,易于扩展。它主要体现在方法的多态和对象的...
Java多态是面向对象编程中的一个...总结来说,Java多态是面向对象编程的关键特性之一,它通过方法重写和对象的类型转换,实现了代码的灵活性、可扩展性和复用性。理解并熟练运用多态性,对于提升Java编程能力至关重要。
Java 多态性是面向对象编程的核心特性之一,它允许我们使用一个通用的接口来处理不同类型的对象,从而使代码更具灵活性和可扩展性。在Java中,多态性主要通过继承和方法重写来实现。 1. **多态的概念**: 多态是指...
**多态(Polymorphism)**是面向对象的三大特性之一,它允许我们使用父类型引用指向子类型的对象,从而实现不同对象对同一方法的不同响应。多态分为编译时多态(方法的重载,Overload)和运行时多态(方法的重写,...
Java中的多态性是面向对象编程的一个核心特性,它允许我们设计更加灵活和可扩展的代码。在Java中,多态性(Polymorphism)主要体现在两个方面:方法的重写(Overriding)和接口的实现(Interface Implementation)。...
"北大青鸟javaOOP多态Ch03作业全集.rar"这个压缩包文件很显然是针对学习者提供的一系列关于Java多态性的练习和案例,帮助学生深入理解并掌握这一核心技能。 多态性是面向对象三大特性之一,另外两个是封装和继承。...
Java多态是面向对象编程的核心特性之一,它允许我们使用一个通用的接口来处理不同类型的对象,从而实现代码的灵活性和可扩展性。在Java中,多态主要通过三种方式实现:继承、接口和方法的重写。 1. **继承与多态**...
Java多态是面向对象编程中的一个核心概念,它允许我们使用一个类型的引用来调用不同子类型的方法。在Java中,多态性是通过继承、接口和方法重写实现的,使得程序更加灵活且可扩展。 1. **继承**: 继承是创建新类...
Java多态是面向对象编程中的一个核心概念,它允许我们使用一个接口来表示多种不同的类型。在Java中,多态性主要体现在方法的重写(Override)和重载(Overload)上,以及父类引用指向子类对象的能力。本文将深入探讨...
在Java中,多态性主要体现在方法的重写(Override)和方法的重载(Overload)。重写是指子类继承父类后,可以对父类的非final和非static方法进行重新定义,使得子类对象调用这个方法时执行不同的逻辑。重载则是指在...