首先我们现在开始进入Jakarta的时代,由原甲骨文易主到 Eclipse基金会下,但是不想舍弃java名字,因此基金会重新投票选出了Jakarta EE(雅加达)。但是我们明白换汤汤不换药的道理,基础是不变的因此重新温习。
温习概念
override:重写(=覆盖)-->一般在子类继承父类时,为了实现不同的功能,重写父类的方法。子类重写的方法与父类对应的方法的名称、返回类型、参数一样,存在垂直的关系。
overload:重载-->同一个类中方法之间的关系,这些方法的名称相同但是参数形式不同,因此存在水平的关系。重载是根据调用的时参表和形参表、参数顺序(参数类型不同)来选择方法。简单说就是:方法重载就是类的同一种功能的多种实现方式,到底采用哪一种方式,取决于调用者给出的参数。
规则
重载的规则:
1.方法名必须一样,参数形式不同(参数的类型、个数、顺序至少有一项是不同)。
1 package bank; 2 3 /** 4 * Created by zjc on 2018/3/8. 5 */ 6 public class overload 7 { 8 public float getCount(){ 9 return 0; 10 } 11 public int getCount(int a,int b){ 12 return a+b; 13 } 14 public float getCount(float a, float b){ 15 return a+b; 16 } 17 public float getCount(double c,float d){ 18 return (float)c+d; 19 } 20 private float getCount(float d,double c){ 21 return (float)c+d; 22 } 23 public static void main(String[] args) { 24 overload o = new overload(); 25 System.out.println( o.getCount(2.3f,2.4f)); 26 } 27 }
↑在此规则下:方法返回类型可以不同,方法的修饰符可以不同。
其中参数类型相同时,参数顺序前后没区别,不能构成重载。
2.不能通过访问权限、返回值类型、抛出异常进行重载(在1规则不符合的情况下);
2.1如果只是返回类型不一样:不能够构成重载。
2.2如果只是控制访问修饰符不一样:不能够构成重载。
3.方法的异常类型、数目不会对重载造成影响;
重写的规则
1.重写(子类)与被重写(父类)方法的返回类型、参数、方法名称要一模一样,否则会编译出错。
1 /** 2 * Created by zjc on 2018/3/8. 3 */ 4 public class override { 5 public static void main(String[] args) { 6 //创建一只猫 7 Cat cat = new Cat(); 8 cat.cry(); 9 Dog dog = new Dog(); 10 dog.cry(); 11 } 12 } 13 class Animal{ 14 int age; 15 String name; 16 17 public void cry(){ 18 System.out.println("我是动物,不知道怎么叫!"); 19 } 20 } 21 //加菲猫 22 class Cat extends Animal{ 23 //覆盖父类 24 public void cry(){ 25 System.out.println("喵喵叫!"); 26 } 27 } 28 //眼镜狗 29 class Dog extends Animal{ 30 //覆盖父类 31 public void cry(){ 32 System.out.println("旺旺叫!"); 33 } 34 }
2.重写(子类)不能缩小被重写(父类)方法的访问权限(public > protected > default > private)。
父类private 子类public这样可以重写
3.重写(子类)与被重写(父类)方法的抛出的异常要一致,或者是其子类。
4.被重写(父类)方法不能为private,否则子类只能定义新方法,不能进行重写。
5.静态方法不能被重写为非静态的方法(编译出错)。