java中重写与重载的区别

方法重写(override):子类中出现了和父类中一模一样的方法声明(方法名、参数列表、返回值类型),也被称为方法覆盖,方法复写。
          使用特点:1、如果方法名不同,就调用对应的方法;
                             2、如果方法名相同,最终使用的是子类自己的。
                       (因为子类对象调用方法时:先找子类本身,再找父类。)      
          方法重写的应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿                                          袭了父类的功能,又定义了子类特有的内容。
         方法重写的注意事项:1、父类中私有方法不能被重写;
                                             2、子类重写父类方法时,访问权限不能更低;
                                             3、父类静态方法,子类也必须通过静态方法进行重写。
         super关键字:代表父类关存储空间的标识(可以理解为父类引用)
                                 用来调用父类成员变量(super.成员变量)、访问构造方法(super(参数列表))、调用成员方法                                      (super.成员方法(参数列表))。
方法重写eg:
//定义一个基本手机类(即父类),此类功能:打电话;
class Phone {
                 public void call(String name) {
                                 System.out.println("给"+name+"打电话");
                      }
               }
//定义一个新的手机类(即子类),此类功能:打电话+发短信;
class NewPhone extends Phone {
                 public void call(String name) {
                 //此处用super引用父类的成员方法(打电话)
                 super.call(name);
                 System.out.println("可以发短信了");
                    }
}
//此处定义一个main方法
class Text {
                  public static void main(String[] args) {
                  NewPhone np = new NewPhone();
                   np.call("沙雪");
                }
}
方法重载(overload):本类中出现方法名一样,参数列表不同的方法。与返回值无关。
          使用特点:1、与返回值类型无关,只看方法名和参数列表;
                            2、在调用时虚拟机通过参数列表来区分同名方法。
          方法重写的应用:在写方法时我们需要见名知意,而我们的需求不断发生改变。定义多个不同的方法名又无法实现程                                          序一看就知道是做什么的。例如:我们需要定义多个求和方法;(见下例)
          参数列表不同:1、参数个数不同;
                                    2、参数列表不同。
方法重载eg:
class FunctionDemo4 {
                      public static void main(String[] args) {
                                         //jvm会根据不同的参数去调用不同的功能
                                         System.out.println(sum(10,20));
                                         System.out.println(sum(10,20,30));
                                         System.out.println(sum(10,20,30,40));
  
                                         System.out.println(sum(10.5f,20f));
                          }
 
                         //需求1:求两个数(整型)的和
                         public static int sum(int a,int b) {
                                           System.out.println("int");
                                            return a + b;
                             }
 
                          //需求2:求三数(整型)的和
                        public static int sum1(int a,int b,int c) {
                                            return a + b + c;
                            }
 
                          //需求3:求四个数(整型)的和
                         public static int sum2(int a,int b,int c,int d) {
                                              return a + b + c + d;
                             }
                         //需求4:求两个数(浮点型)的和
                      public static float sum(float a,float b) {
                                              System.out.println("float");
                                              return a + b;
                                }
}
阅读更多
文章标签: jav
个人分类: jav
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭