java中的重写和重载

  • 重写

  在java中有很多的继承,继承下来的有变量、方法。在有一些子类要实现的方法中,方法名、传的参数、返回值跟父类中的方法一样,但具体实现又跟父类的不一样,这时候我们就需要重写父类的方法,就比如我们有一个类叫做Animals,Animals类中有一个叫做Call,然后我们继承Animals又生成了Cat类和Dog类,Cat和Dog也分别有自己特别的叫声,程序如下:

 1 class Animals {
 2     public void call() {
 3         System.out.println("啊啊啊啊啊啊啊");
 4     }
 5 }
 6
 7
 8 public class Cat extends Animals {
 9     @Override
10     public void call() {
11
12         System.out.println("喵喵喵喵喵");
13     }
14 }
15
16
17 public class Dog extends Animals {
18
19     @Override
20     public void call() {
21         System.out.println("汪汪汪汪汪汪");
22     }
23
24     public static void main(String[] args) {
25         Animals animals = new Animals();
26         animals.call();
27
28         Cat cat = new Cat();
29         cat.call();
30
31         Dog dog = new Dog();
32         dog.call();
33     }
34
35 }

打印结果如下:

  • 重载

  重载是在一个类中实现的,有多个同名方法,但参数不一样,包括参数类型、参数个数、还可以没有参数,总之每个重载的方法的参数必须不一样。

现在我写一个小程序,用来进行比较两个数值大小的,代码块如下:

 1 public class Compare {
 2
 3     public void max(int a, int b) {
 4         System.out.println(a>b?a:b);
 5     }
 6
 7     public void max(float a, float b) {
 8         System.out.println(a>b?a:b);
 9     }
10
11
12     public void max() {
13         /**
14          * 无参重载
15          * */
16         System.out.println("Coding...");
17     }
18     public static void main(String[] args) {
19         // TODO Auto-generated method stub
20         Compare compare = new Compare();
21         compare.max(102, 23);
22         compare.max(2.0f, 3.0f);
23         compare.max();
24     }
25
26 }

打印结果如下图:

  • 总结

  重写是外壳不变,核心变。也就是说方法名不变,参数不变,具体实现可以改变。一般是在父类中声明方法,在子类中重写。

  重载是方法名不变,但参数一定要变。而且重载的方法一般都写在一个类中。用一张图来表示区别如下:

时间: 2024-12-26 04:01:43

java中的重写和重载的相关文章

Java中的重写

以下内容引用自http://wiki.jikexueyuan.com/project/java/overriding.html: 如果一个类从它的父类继承了一个方法,如果这个方法没有被标记为final ,就可以对这个方法进行重写. 重写的好处是:能够定义特定于子类类型的行为,这意味着子类能够基于要求来实现父类的方法. 在面向对象编程中,覆盖方法意味着去重写已经存在的方法. 示例: 来看以下的例子: class Animal{ public void move(){ System.out.prin

Java中的构造函数和重载

一.Java中的构造函数 构造函数是对象被创建时初始化对象的成员方法,它具有和它所在的类完全一样的名字.构造函数只能有入口参数,没有返回类型,因为一个类的构造方法的返回类就是类本身.构造函数定义后,创建对象时就会自动调用它,对新创建的对象分配内存空间和初始化.在 Java 中,构造函数也可以重载,当创建一个对象时, JVM 会自动根据当前对方法的调用形式在类的定义中匹配形式符合的构造方法,匹配成功后执行该构造方法. eg: public Class Dog { private int age:

java中的覆盖,重载和多态

今天来介绍java中的三大强功能覆盖,重载和多态. 方法覆盖:当一个子类继承了一个父类时,它也同时继承了父类的属性和方法,可以直接使用父类的属性和方法,或者,如果父类的方法不能满足子类的需求,则可以在子类中对父类的方法进行"改造"即覆盖.在覆盖的过程中,需要提供和父类中的被覆盖方法相同的方法名称,输入参数以及返回类型.另外,在子类对父类的方法进行覆盖的过程中,不能使用比父类中的被覆盖方法更严格的访问权限,例如父类中方法的修饰符为public,则子类的覆盖方法不能用protected,d

java方法的重写与重载

方法重写规则: 参数列表和返回值类型必须与被重写的方法相同 访问权限不能比父类中被重写的方法的访问权限更低.例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected 父类的成员方法只能被它的子类重写 声明为final的方法不能被重写 静态方法也能被继承. 但是, 静态方法不能被覆盖. 如果父类中 定义的静态方法在子类中被重新定义, 那么在父类中定义的静态方法将被隐藏. 可 以使用语法: 父类名 .静态方法名(SuperClassName. staticM

java中为什么重写equals时必须重写hashCode方法?

在上一篇博文Java中equals和==的区别中介绍了Object类的equals方法,并且也介绍了我们可在重写equals方法,本章我们来说一下为什么重写equals方法的时候也要重写hashCode方法. 先让我们来看看Object类源码 /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided

Java 继承与重写、重载

1.类的继承 1)继承 父类:所有子类所共有的属性和行为 子类:子类所特有的属性和行为 通过extends关键字来实现类的继承 子类(Sub class)可以继承父类(Super class)的成员变量及成员方法,同时也可以定义自己的成员变量和成员方法 Java语言不支持多重继承,一个类只能继承一个父类(单一继承),但一个父类可以有多个子类 继承具有传递性,子类的子类可以继承父类的父类的成员变量及成员方法 2)继承中构造方法(super关键字) Java规定:构造子类之前必须先构造父类 子类的构

OC中只有重写没有重载

一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. 二.方法重写 在Objective-c中,子类可继承父类中的方法,而不需要重新编写相同的方法,直接可以使用父类的方法.但有时我们不想使用使用父类方法,而是想作一定的修改,怎么办呢?只要将子类中书写一个与父类具有相同的方法名.返回类型和参数,就可以将将父类的方法覆盖重写.比较简单. 三.方法重载 在Objec

java中子类重写父类方法的思想本质

java语言中,在子类中定义与父类同返同名同参的方法将会出现"重写(覆写)",子类将屏蔽父类的相同方法,调用子类的方法将不会调用到父类的该方法. 许多初学者也许会被"覆写"一词迷惑,以为覆盖掉了父类的方法,其实这两种方法是同时独立存在的,只是子父类调用该方法的入口不一样,彼此互不干扰. 1 /* 2 需求:设计一个简单的java程序,证明子类重写父类方法的过程 3 思路: 1.创建父类对象,通过父类对象调用该方法 4 2.创建子类对象,通过父类对象调用该方法 5 3

面向对象概念中方法重写与重载的区别?

重载:重载一定是在同一个类当中,有一组方法名字相同,功能是类似的,但参数不同. 重写:在父子类当中,子类拥有与父类同名.同参.同返回类型的方法,可以改变父类的行为.父类加关键字virtual虚方法(为了在子类当中去重写父类的方法),子类中要加关键字override,体现了面向对象中的多态性(都不叫就不是方法的重写,而是方法的覆盖).