• 重载,重写和super


    1.重载的概念:
    ----->在同一个类中,允许存在同名函数,但它们的参数个数或者参数类型不同即可。
    public static void main(String[] args){
    System.out.println(add(1,2));
    System.out.println(add(1.11,2.22));
    }
    //返回一个int类型相加的和
    public static int add(int a, int b){
    return a + b;
    }
    //返回一个double类型想加的和
    public static double add(double a, double b){
    return a + b;
    }

    重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。
    简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。

    重写就是子类重写了父类的方法。
    比如:
    class Fu{
    int num = 3;
    }
    class Zi extends Fu{
    int num = 5;
    }
    这时候Zi类继承了Fu类,也拥有了num,这时候输出num,JVM(虚拟机)会先去Fu类中查找,
    输出Fu类中的num,但是Zi类有num,所有在运行Zi类的时候重写了num的值,输出5

    //----------------
    要说super就先要说this。
    "this",作为一个特殊的关键字,它的规则如下:
    1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,
    不是变量,没有什么类型。
    2。可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,
    它有静态类型,就是这个类C本身;它有动态类型,就是当前这个对象的类型。你可以对它调用成员函数,
    把它传递给别的函数,等等等等。只要一个C类型的final变量可以出现的地方,它就可以出现。
    "super"。它和"this"类似,但是也有不同的地方。
    1。表示调用父类的构造函数。也是一个特殊语法,不是变量,没有什么类型。
    2。可以在一个类的非static成员内部使用。比如super.method()。
    但是,注意,这个super.method()只是长得跟some_var.method()一样,一个语法糖而已。实质上,"super"根本不是一个变量。
    为什么不是?因为如果是就坏了。java里面有一个金科玉律:任何public非static函数的调用都是多态的。
    所以,如果super是个变量,也指向当前对象,那么,不管super的静态类型是什么super.method()必然调用的是子类的那个版本,
    而不会是我们期望的,静态地选择父类的那个版本。所以,你只要把super.xxx看成一个特殊的语法,比如理解为“super::xxx”就好了。
    既然super不是一个变量,那么不能把它象一个普通变量那样"==",或者传递给某个函数就看起来很正常了,是么?何况,你其实也用不着
    它,有this你这些要求就都可以办到了。
    3。super的另外一个作用是调用父类的protected函数。只有通过"super"这个魔咒,我们才能操作父类的protected成员,别无它法。

    ---- 动动手指关注我!或许下次你又能在我这里找到你需要的答案!ZZZZW与你一起学习,一起进步!
  • 相关阅读:
    C# IP地址字符串和数值转换
    Xstream序列化实体
    异步线程及同步控制
    XML序列化与反序列化(转)
    C# Webserice 代理生成工具(WSDL)
    ASP.NET(C#)图片加文字、图片水印(转)
    异步导致UI句柄增加的解决办法
    终于找到WinForm自定义控件不能拖到IDE设计器容器的办法
    C# PropertyGrid控件应用心得(转载)
    GDI_图片半透明效果示例
  • 原文地址:https://www.cnblogs.com/zzzzw/p/4934420.html
Copyright © 2020-2023  润新知