`
Vikings825
  • 浏览: 66081 次
  • 性别: Icon_minigender_1
  • 来自: 威海
文章分类
社区版块
存档分类
最新评论

Java方法覆盖和重载(overload,extends)

阅读更多
1.Java重载
引用
在Java中,同一个类中的两个或者两个以上的方法可以有同一个名字,只要他们的参数声明不同即可,这种方法被称为重载(overload),方法重载是Java实现多态性的一种方式。

1.普通方法重载
当一个重载方法被调用时,Java用参数类型或参数数量来表明实际调用的重载方法的版本。因此每个重载方法的参数或参数数量必须是不同的。虽然每个重载方式可以有不同的返回类型,但返回类型并不足以区分所调用的是哪个方法。
2.当一个重载方法被调用时,Java在调用方法的参数和方法的自变量之间寻找匹配,但是这种匹配并不总是精确的,在一些情况下,Java的自动类型转被也适用于重载方法的自变量。例如:
class OverloadDemo{
  void test(){
    System.out.println("No parameters");
  } 

  void test(int a,int b){
    System.out.println("a and b"+ a + " " + b);
  }
  
  void test(double a){
    System.out.println("Inside test(double) a :" + a);
  }
}

public class Test{
  public static void main(String []args){
    OverloadDemo ob = new OverloadDemo();
    int i = 88;
  ob.test();
   ob.test(10,30);
   ob.test(i);
   ob.test(2.343);
  }  
}


结果自己去运行试试。
3.重载构造函数


2.方法覆盖(extends中的方法)

引用
如果在子类中定义一个方法,其名字,返回类型以及参数正好与父类中的某个方法的名字,返回类型以及参数相匹配,那就是:子类的方法覆盖了父类的方法。


覆盖方式的约束条件:
引用
(1)子类的方法的名称,参数名和返回类型必须与父类方法的名称,参数名和返回类型一致。

以下代码会导致编译错误:
public class Base{
 public void method(){..}
}

public class Sub extends Base{
  public int method(){
  //编译错误,返回类型不一致
   return 0;
  }
}

引用
(2)子类方法不能缩小父类方法的访问权限,

如下错误代码:
 public class Base{
 public void method(){
 }
 }
  public class Sub extends Base{
 private void method(){
 }
}

为什么呢?如果可行的话,将会和Java语言的多态机制发生冲突。

引用
  (3)子类方法不能抛出比父类方法更多的异常。子类方法抛出的异常必须和父类方法抛出的异常相同或只是父类方法抛出的异常类的子类。

为什么呢?自己去想哈!还是跟多态有关系的。
这里面有个非常特别的就是RuntimeException,因为即使没有显示声明抛出异常,在默认情况下,都是可以抛出RuntimeException的。
引用
(4)父类的静态方法不能被子类覆盖为非静态方法。

引用
(5)子类可以定义与父类的静态方法同名的静态方法,已便在子类中隐藏父类的静态方法,在编译时,必须满座与方法覆盖类似的约束:方法的参数名一致,返回类型一致,不能缩小父类的方法的访问权限,不能抛出更多异常。

引用
(6)父类的非静态方法不能被子类覆盖为静态方法。

引用
(7)父类私有方法不能被子类覆盖。

引用
(8)父类抽象方法可以被子类通过两种途径覆盖:一种是子类实现父类的抽象方法;另一种是子类重新声明父类的抽象方法

因为很重要加点实例代码:
public abstract class Base{
 abstract void method1();
 abstract void method2();
}
public abstract class Sub extends Base{
  public void method1(){....}//实现method1方法,并扩大访问权限
  public abstract void method2();//重新声明method2方法,仅仅扩大访问权限,但不实现
}

缩小访问权限是错误的,例如:
public abstract class Base{
 abstract void method1();
 abstract void method2();
}
public abstract class Sub extends Base{
   private void method1(){....}
  private  abstract void method2();
}


(9)父类的非抽象方法可以被覆盖为抽象方法,例如:
public  class Base{
 void method();
}
public abstract class Sub extends Base{
   public abstract void method(){....}
  
}






分享到:
评论

相关推荐

    PHP和JAVA中的重载(overload)和覆盖(override) 介绍

    重载(Overload)和覆盖(Override)是面向对象编程中的两个重要概念,它们在PHP和Java等编程语言中有着不同的应用和规则。 **重载(Overload)** 重载通常发生在同一类内部,指的是可以有多个同名方法,但这些方法的...

    Java 重写(Override)与重载(Overload).pdf

    根据提供的文件信息,我们可以深入探讨Java中的两个核心概念:重写(Override)与重载(Overload)。这两个概念在面向对象编程中非常重要,尤其是在Java这样的语言中。 ### Java中的重写(Override) #### 什么是重写? ...

    Java重写(Override)&重载(Overload).pdf

    Java中的重写(Override)和重载(Overload)是面向对象编程中的两个核心概念,它们都是为了提高代码的灵活性和可复用性。 **重写(Override)** 是...在设计类和方法时,根据需要选择合适的方式,以满足特定的需求和场景。

    解析Java继承中方法的覆盖和重载

    总结来说,Java继承中的方法覆盖和重载是两种不同的多态表现形式。覆盖主要用于子类定制父类的行为,而重载则是在一个类中提供多种方法实现,以适应不同的输入需求。理解并灵活运用这两者,对于编写可扩展和易于维护...

    Java重写(Override)与重载(Overload)区别原理解析

    Java 编程语言中有两个重要的概念:重写(Override)和重载(Overload)。这两个概念经常被混淆,但它们具有不同的作用和特点。本文将详细地介绍 Java 中的重写和重载,帮助读者理解它们之间的区别和应用场景。 一...

    overload and override

    在面向对象编程中,尤其是在Java语言中,`Overload`(重载)和`Override`(重写)是两个非常重要的概念,它们帮助开发者更好地组织代码并提高代码的复用性和灵活性。 #### 二、Overload(重载) **定义**: - `...

    [Java]重载,重写以及继承,多态的区

    子类可以继承父类的所有属性和方法,除了构造方法和final修饰的方法。继承的主要目的是为了代码复用和提高代码的可扩展性。例如: ```java class Shape { public int getSides() { return 0; } } class ...

    java 重载(overload)与重写(override)详解及实例

    Java中的重载(Overload)和重写(Override)是两个重要的面向对象概念,它们都是实现多态的方式,但有着本质的区别。 **重载(Overload)** 重载发生在同一类或具有继承关系的类中,它允许创建多个同名方法,但这些方法...

    override和重载的区别

    在编程语言中,"override" 和 "重载"(overload)是两个常见的概念,它们都与函数或方法的行为有关,但具体含义和使用场景不同。理解这两个概念对于编写多态性和灵活性的代码至关重要。 首先,我们来谈谈“重载”...

    继承多态重载与接口PPT学习教案.pptx

    继承是Java面向对象编程的重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。这在软件工程中极大地提高了代码的复用性和可维护性。在Java中,继承是通过`extends`关键字实现的,例如: ```java ...

    Override-Overload

    在面向对象编程中,方法重写(Override)和方法重载(Overload)是两个非常重要的概念。它们虽然都涉及到方法名称的重复使用,但是其本质含义、作用以及应用场景有着明显的区别。 #### 一、Override(方法重写) *...

    java实验报告(2)-多态和继承

    在Java中,多态主要体现在方法的重写(Override)和方法的重载(Overload)。重写是指子类对父类的虚方法给出自己的实现,而方法重载则是在同一类中定义多个同名但参数列表不同的方法。 - **方法的重写(Override...

    Java课程总结.pdf

    - 方法重载与覆盖:Java中的方法重载(overload)和方法覆盖(override)是面向对象多态性的体现。 3. Java集合框架 - Collection:Java的集合框架包括`Set`、`List`、`Map`等接口,用于存储和管理对象集合。 - ...

    override和重载 希望对大家有帮助

    在编程语言中,`override` 和 `重载(Overload)` 是两个非常重要的概念,它们分别涉及面向对象的多态性和方法的灵活性。这两个概念在Java、C#等面向对象的语言中尤为常见,但理解它们的含义和用法对于任何程序员来说...

    Java面向对象程序设计+源代码+课后习题答案)

    Java的多态性主要体现在方法的重写(override)和方法的重载(overload)上。 5. 接口:接口在Java中是一种完全抽象的类,只包含常量和抽象方法。接口用于定义类型的行为规范,一个类可以实现多个接口,实现多继承...

    面向对象Java课件

    Java中的多态主要体现在方法的重写(Override)和方法的重载(Overload)。重写发生在子类中,当子类的方法与父类方法同名并且参数列表完全相同时,子类的方法会覆盖父类的同名方法。而方法的重载则是在同一类中,...

    Java overload和override的区别分析

    Java中的方法重载(Overloading)和重写(Overriding)是两个重要的概念,它们都是实现多态性的方式,但有着本质的区别。 1. **方法重载(Overloading)**: 方法重载是指在同一个类中可以有多个同名方法,但这些方法的...

    Java面试宝典 Java面试宝典

    答:方法覆盖和方法重载实现多态。 22. abstractclass和interface有什么区别? 答:abstract class可以有构造器和成员变量,而interface不能有构造器和成员变量。 23. abstract的method是否可同时是static,是否可...

    JAVA程序考试教程SL275-2(华信内部资料)

    本章节主要探讨了JAVA中的类设计概念,特别是聚焦于继承、方法覆盖(Override)、方法重载(Overload)以及多态等核心知识点。下面我们将深入分析这些概念及其在JAVA中的应用。 ##### 继承 继承是面向对象编程的一...

    Java类和对象的概念-Java教程共3页.pdf.zip

    Java通过方法覆盖(Override)和方法重载(Overload)实现多态性。方法覆盖是指子类可以重新定义父类中的方法,而方法重载则是在同一类中定义多个同名但参数列表不同的方法。 6. **构造函数(Constructor)**: ...

Global site tag (gtag.js) - Google Analytics