首先重载和重写是应用于两个不同场景下面的两种不同的手段:
两者各自的特征:
重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不同。
(1):方法名必须相同
(2):方法的参数列表一定不一样。
(3):访问修饰符和返回值类型可以相同也可以不同。
其实简单而言:重载就是对于不同的情况写不同的方法。 比如,同一个类中,写不同的构造函数用于初始化不同的参数。
下面是演示重载的代码:
1 package com.hone.overrideAdnOverload; 2 3 public class Animal { 4 public void bark(){ 5 System.out.println("animal can bark"); 6 } 7 8 public void bark(String s){ 9 System.out.println("animal"+ s +"can bark"); 10 } 11 12 13 public void bark(int i){ 14 System.out.println("The animal number "+i+" can bark"); 15 } 16 17 public static void main(String[] args) { 18 Animal animal=new Animal(); 19 animal.bark(1); 20 } 21 }
2:重写:
重写(override):一般都是表示子类和父类之间的关系,其主要的特征是:方法名相同,参数相同,但是具体的实现不同。
重写的特征:
(1):方法名必须相同,返回值类型必须相同
(2):参数列表必须相同
(3):访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
(4):子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
(5):构造方法不能被重写,
简单而言:就是具体的实现类对于父类的该方法实现不满意,需要自己在写一个满足于自己要求的方法。
1 public class Animal { 2 3 public void bark(){ 4 System.out.println("animal can bark"); 5 } 6 }
1 package com.hone.overrideAdnOverload; 2 3 public class Dog extends Animal{ 4 5 public void bark(){ 6 System.out.println("Dog can bark"); 7 } 8 9 public static void main(String[] args) { 10 Dog dog=new Dog(); 11 dog.bark(); 12 } 13 }
重写:就是子类对于父类的相应的方法的具体实现不满意,需要按照自己的要求来实现自己的需求。