Java语言中方法重载与方法覆盖的异同
导语:在Java语言的学习过程中,初学者经常分不清重载与覆盖,实际上,方法重载(Overload)和方法覆盖(Override,也叫重写)都是Java多态性的体现,只是形式不同,在此,笔者简单地谈一谈两者的异同。 下面就由小编为大家介绍一下Java语言中方法重载与方法覆盖的异同,欢迎大家阅读!
1 方法重载与方法覆盖的特点
1.1 方法重载的特点
Java语言中的方法重载就是在类中可以创建多个方法,实际上就是一个类中多态性的一种表现,也叫静态多态。
如下面的例子:
1 class DBUtil{
2 private String server="";//服务器地址
3 private String db="HRDB";//数据库名称
4 public String getDBUrl(String server,String db){//重载方法
5 return "jdbc:sqlserver://"+server+":1433; DatabaseName="+db;
6 }
7 public String getDBUrl(String server){ //重载方法
8 return getDBUrl(server,db);
9 }
10 public String getDBUrl(){//重载方法
11 return getDBUrl(server,db);
12 }
13 }
14 public class StaticPolymorphismDemo {
15 public static void main(String args[]) {
16 DBUtil util=new DBUtil();
17 //调用第4行的方法
18 tln(BUrl("","CXHR"));
19 //调用第7行的方法
20 tln(BUrl(""));
21 //调用第10行的方法
22 tln(BUrl());
23 }
24 }
方法重载的主要特点有以下几点:第一个特点是方法名是相同的;第二个特点是方法的个数、顺序、参数类型至少有一项是不相同的;第三个特点是方法的返回类型不一定要是相同的;第四个特点是方法的修饰符也可以是不相同的。
1.2 方法覆盖的特点
Java语言中的方法覆盖是指父类中有的方法,在子类中被重新定义,方法签名一样(方法名,参数个数和参数类型都一样)的情况,也叫动态多态。
如下面的例子:
public class Base {
public void method() {}
}
public class Sub extends Base{
public void method() {}
}
方法覆盖的特点主要有以下几点:第一个特点是方法覆盖只存在于子类和父类之间,在同一个类中的方法不能被覆盖;第二个特点是父类方法抛出的异常可以比子类方法更多; 第三个特点是父类方法的名称、参数签名和返回类型与子类方法的是一致的; 第四个特点是子类是不允许将父类的静态方法覆盖为非静态方法,父类的非静态方法也不能被子类覆盖为静态方法;第五个特点是子类方法不能缩小父类方法的访问权限;第六个特点是子类不能覆盖父类的私有方法;第七个特点是子类可以通过两种途径覆盖父类的抽象方法:一种是子类实现父类的抽象方法,另一种是子类重新声明父类的抽象方法;第八个特点是父类的.非抽象方法可以被覆盖为抽象方法。
2 方法重载与方法覆盖的异同
2.1 方法重载与方法覆盖的相同点
Java语言中,方法重载与方法覆盖的主要相同点有两个:第一个相同点是法重载与方法覆盖都要求方法同名;第二个相同点是方法重载与方法覆盖在抽象方法和非抽象方法之间都可以使用。
2.2 方法重载与方法覆盖的不同点
Java语言中,方法重载与方法覆盖的主要不同点有以下5个:第一个不同点是方法重载不允许参数签名一致,相反,方法覆盖则要求参数签名必须一致;第二个不同点是方法重载对返回类型是否一致不做限制,而方法覆w则要求返回类型必须一致;第三个不同点是方法重载可以用于同一个类的所有方法,而方法覆盖则仅限于用于子类覆盖父类的方法;第四个不同点是方法重载对方法的访问权限和抛出的异常方法不做限制性要求,而方法覆盖对此则有特殊的要求;第五个不同点是一个方法在所在的类中可以多次重载,而父类的一个方法则只能被子类覆盖一次。
总之,方法的重载(Overload)和覆盖(Overrid)是Java多态性的不同表现。重载(Overload)是一个类中多态性的一种表现,而覆盖(Overrid)是父类与子类之间多态性的一种表现。灵活地运用方法重载与方法覆盖,不仅能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。
-
jsp向cookie写入中文乱码的解决办法
jsp在向cookie写入中文乱码大家是怎么处理的呢?下面是小编给大家提供的解决办法,大家可以参考阅读,更多详情请关注应届毕业生考试网。在jsp中对中文的处理有一点不好就可能出现乱码了,下面我来给大家介绍jsp中向cookie写入中文实现程序有需要了解的`朋友可参考。Co...
-
2017计算机二级考试《JAVA》备考测试题「带答案」
为确保同学们将所涉及的考点全面复习到位,让大家充满信心的步入考场,以下是本站小编搜索整理的一份计算机二级考试《JAVA》备考测试题【带答案】,供参考练习,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!1).下列语句中,可以作为无限循环...
-
Java创建线程的三种方法
导语:编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。下面是Java创建线程的三种方法,一起来学习下吧:Runnable和Callable的区别(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务...
-
经典Java基础面试题
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。下面小编给大家介绍经典Java基础面试题,欢迎阅读!经典Java基础面试题1、如果main方法被声明为...