新手学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-05 18:57:15

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

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

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

【经验分享】新手学Java编程语言怎么入门?

新手学Java编程语言怎么入门?掌握语言基础是第一步,了解java基础知识,Java关键字.核心概念或者基本编码技术.掌握操作符.控制执行流程.访问权限控制.复用类.多态.接口.字符串.泛型.数组.容器深入研究.JavaI/O系统.枚举类型.并发以及图形化用户界面等内容. 为了帮助大家更轻松的学好java开发,给大家分享一套java开发学习资料,小编推荐一个学java开发技术的学习裙:三七四三二零二八二,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干

新手转行学java难吗?新手学java需要注意的6个方面!

新手转行在成都学java到底难不难,对于这个问题,我们专门做过一个调查,超过1000名已经在职的java从业者,其中有80%的程序员觉得学java不难,20%的程序员觉得前期有点难,其中对于50%自学的新手认为java很难学,遇到问题没人解答,又或者是答案太多,根本不知道哪个回答是正确的.所以,我们得出结论,能系统学习的,有老师指导的java课程学起来相对容易,而没有人指导,仅仅靠看视频学习的同学来说会无形中增加难度. 很多新手在准备转行学习java之前,在网上看到或听到很多不懂的人会说,jav

Java 中 override 和 overload 的去别人

问题出现: 即使对于一个经验丰富的开发人员来说,方法重载和方法覆盖的区别都能让他犹豫一下, 对于新手来说,经常容易弄混淆. 有没有比较深入浅出的理解方式,能让人过目不忘,用起来还能有条件反射般的速度呢? 其他人是怎么做的: 写类似比较的博客非常之多,无非也就是分开介绍,然后比较区别. 好像也有效果,前提是要理解,完了还要不时拿来复习,保持记忆不被遗忘. 可以这样理解: override 更准确的翻译应该是推翻,重写. overload 更准确的翻译应该是过载. 如果你不是新手,看到这个解释的时候

新手学Java笔记心得之Java基础

第一次学习Java,一些基本的常用的快捷方式和一些很基础的知识点(笔记比较零散比较乱) Java是一种既面向对象又可以跨平台的语言,即:编写一次,随处运行: Java不仅适用于单机应用程序和基于网络的程序,也可用于创建消费类设备的附件程序,如移动电话.掌上设备等. Java命名规范首字母可以是字母,下划线'_','$'符号后面加上任意多的数字,字母,下划线,'$'符号通常第一个单词的首字母小写,其后单词的 首字母大写.例如:myScore MyEclipse编写Java代码的快捷键(新手不推荐使

java中Override 和 Overload的区别

override(重写)  1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载) 1.参数类型.个数.顺序至少有一个不相同. 2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中.

新手学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)Object1 Reference1(对象引用)== Object1

新手学JAVA(十一)-多线程----线程的生命周期

新建和就绪状态 运行状态和阻塞状态 线程死亡 当一个线程被创建并启动之后,并不是一开始就处于执行状态,已不是一直处于运行状态.线程也是有生命周期的,包括:创建(New).就绪(Runnable).阻塞(Blocked).运行(Running).死亡(Dead)五种状态.当线程运行时,也不可能一直霸占着CPU独自运行,而是一直在运行.就绪状态之间切换. 新建和就绪状态 当程序通过new创建一个线程时,这个线程就处于新建(New)状态了,不过这个时候该线程并没有表现出线程的任何特征,和其他的普通ja