新手学JAVA(七)----Override VS Overload

  • 一 Overload
  • 二 Override
  • 三 多态性

一. Overload



在同一个类中的许多方法可以拥有相同的名字,只要他们的参数声明不同即可,这种方法被称为重载。
举个例子:

public class overload{

    '''一个重则输出方法'''
    void print(){
        System.out.println("Hello!");
        }

    '''重载上面的输出方法,加上了参数'''
    void print(String name)
    {
        System.out.println(name + ",Hello!");
        }

    '''重载上面的输出方法,加上两个参数'''
    void print(String name,int height){
        System.out.println(name +",Hello!你有" + height + "cm高吗?");
    }

    public static void main(String args[]){
        overload ol = new overload();   '''创建一个对象ol'''
        ol.print();
        ol.print("令仔");
        ol.print("令仔",180);
        }
}

运行结果:

Hello!
令仔,Hello!
令仔,Hello! 你有180cm高吗?

上面的实例中定义了3个同名的方法,但是却有不同的参数类型和参数类型,使用重载其实就是避免繁多的方法名,有些方法的功能是相似的,如果重新建立一个方法,重新取个方法名称,这回让程序段显得不容易阅读。跟之前做系统的时候用到的SQLHelper挺像的。

重载的实质:

  • 方法名相同
  • 参数个数可以不同
  • 参数类型可以不同

当访问一个重载方法时,首先编译器会比较参数类型与实际调用方法中使用值得类型,已选择正确的方法,如果发现没有匹配的方法,则编译器报错。

二. Override



说到覆盖,就要先说说面向对象三大特征之一:继承;在继承的过程中,子类中可以直接使用父类所继承下来的方法,但是当子类中有声明了相同名称的方法的话,调用的则是子类的方法,这就是所谓的覆盖。
看个实例:

public class father{   

    '''创建方法print()'''
    void print(){
        System.out.println("这是父类特性!");
        }

    public static void main(String args[]){
         father f = new father();
         son s = new son();
         f.print();
         s.print();
        }
}

class son extends father{       '''创建子类son继承father'''
    void print(){                 '''覆盖方法print()'''
        System.out.println("这是子类特性!");
        }
    }

运行结果:

这是父类特性!
这是子类特性!

从上面的这段代码可以看出,子类重新定义类父类的print()方法,子类的覆盖方法与父类相同,知识方法体不一样。

三. 多态性



多态就是拥有多种形态,在Java中,多态主要是指拥有相同的形式,但不同的参数实现不同的功能。
先说说重载:

'''创建一个学生类'''
public class student
{
    student()    '''无参数构造函数'''
    {}
    student(string name)   '''带一个参数的构造函数'''
    {}
    student (string name,string code)  '''带两个参数的构造函数'''
}

上面的三个例子是3个构造函数的重载函数,具有相同的形态,但是他们根据参数的不同,实现的功能也不同,这就是多态,所以说重载其实具有多态性,或者说,重载是多态的一种形式。

然后再说覆盖,为什么也具有多态性?因为父类的方法在子类中被重写,多态就是拥有多种形态,子类和父类的方法名称相同,只不过完成的功能不一样,所以说覆盖也具有多态性。
可以说重载和覆盖是多态的两种表现形式。

时间: 2024-11-03 04:01:47

新手学JAVA(七)----Override VS Overload的相关文章

新手学JAVA(三)----StringBuilder类

   上一篇文章新手学JAVA(二)----String类与StringBuffer类的区别中了解到,String的值是不可变的,这就导致 每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变 类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象.       StringBuffer类和StringBuilder类功能基本相似.算是两个双胞胎.   下面主要说两点   第一点  线程安全   Str

跪求大神解答-新手学java有几个不懂得问题求各位大神解答

问题描述 新手学java有几个不懂得问题求各位大神解答 封装有什么意义.为什么要用prative封装呢.直接public不行吗?都说为了安全难道用一个方法setter getter 改变数据这样就安全么?.直接public 多方便.求大神举个例子说明. 第二个问题static:证明此方法是由类名称调用的这句话怎么理解. 第三个问题static有什么作用,我就知道他在类里最先执行然后可以不实力化调用,然后有什么用这有点蒙. 第四个问题我理解的映射就是一项与另一项的关系.他也可以用属性表示.但是之所

新手学java pop3遇到的问题,用户名

问题描述 新手学java pop3遇到的问题,用户名 DEBUG: setDebug: JavaMail version 1.4ea DEBUG: getProvider() returning javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc] DEBUG POP3: connecting to host "pop.qq.com", port 110, isSSL fal

新手学java 的流程 是什么样的 ?

问题描述 最终想学web开发方向的.... 解决方案 解决方案二:java基础htmlcssjavascriptjspstrutshibernate,ibatisspring解决方案三:引用1楼lijian8552的回复: java基础htmlcssjavascriptjspstrutshibernate,ibatisspring 要学什么数据库么?解决方案四:数据库的一些基础知识是相通的,就是具体有些操作不同,可以学mysql解决方案五:引用楼主liners3的回复: 最终想学web开发方向的

新手学JAVA(十)-多线程----线程的创建和启动

Java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类的实例.每个下次你哼的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段程序流     在Java线程的创建有三种方式      通过继承Thread类创建线程类 步骤如下 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务.因此把run()方法称为线程执行体. 创建Thread子类的实例,即创建了线程的对象.

新手学JAVA(四)----装箱与拆箱

一 什么是装箱?什么是拆箱? 在Java中,Java对每种基本数据类型都提供了对象的包装器类型.看下表:                                                                                                            包装类对应表 基本数据类型 包装类 byte Byte boolean Boolean short Short char Character int Integer long Lo

新手学java看什么书比较好

问题描述 求推荐,急急如律令 解决方案 解决方案二:java从入门到精通(第三版)

新手学JAVA(六)----处理随机性的数据

基础知识 实例 在我们的日常生活中会遇到很多随机性的事情,比如:摇奖,彩票,掷色子,这些都可以通过程序计算其中奖的概率.在JAVA的类库中,有一个专门操作这种随机性数据的类--Random类. 基础知识 Random类一般使用在那些随机性比较强的场合,因为这些场合都含有一种随机的特性,也就是使用同样的方法去操作数据,每次操作的结果都不一样. 下面是Random类的常用方法: 方法 表示 public boolean nextBoolean() 返回true或者是false public doub

新手学JAVA(一)——Equals和“==”的区别

      一句话概括:     如果操作两边都是对象句柄,就比较两个句柄是否指向同一个对象.如果两边是基本类型,则比较的就是值.          ==不属于任何类,而equals则是任何类(Java中)的一个方法.     equals()是每个对象与生俱来的方法,因为所有类的最终基类就是Object(除去Object本身):而equals()是Object的方法之一.     我们可以这样比较:     1)Primitive1(基本类型)== Primitive2(基本类型)     2