Java中的static方法能否重置和重载

发布网友 发布时间:2022-04-20 02:51

我来回答

5个回答

热心网友 时间:2022-05-16 16:15

可以被重载,不可以被重写。纠正下,不是重置,是重写。
解释:
一:static方法是不能被重写的,重写通常针对的是接口方法,而接口方法中只是进行的接口定义,而没有方法的实现,而static方法肯定是要求有方法体的,所以有冲突。
二:static方法是可以重载的,因为重载只是定义了方法名相同,其余的一切参数类型、个数、返回值发生变化都是被允许的,所以是可以重载方法的(实际上就相当于重新创建了一个静态方法)。

热心网友 时间:2022-05-16 16:15

呃,那个,static有所谓的重写这说法么?

重写是指在类的继承体系上,类中“被继承的”方法被修改了。

使用static方法的正确方式是用类名来引用的。不然是会出问题的涅。比如说你的例子吧,虽然你写出来没有语法错误。但是,嘿嘿,如果你用Chong min=new Ming()弄了min出来,你说min.cout()应该输出什么呢?自己试试,试之前先猜猜看。

至于重载嘛,这倒是说得通,因为在同一个类里面,你可以存在同名但不同参数的static方法。但是呢,我们一般说的重载是包括了继承中出现的重载。而我们已经知道了static是属于类的,不参与继承,所以导致的就是static方法在继承体系里面不可重载了。

总的来说呢,嗯,你只是概念不清晰而已,因为static根本就没有重写之说。static方法引用的时候应该用类名来引用,而不是对象。同时static方法不参与继承,所以在继承体系里面也不存在重载的说法。

PS:万恶的教材。。

热心网友 时间:2022-05-16 16:16

呃,那个,static有所谓的重写这说法么?

重写是指在类的继承体系上,类中“被继承的”方法被修改了。

使用static方法的正确方式是用类名来引用的。不然是会出问题的涅。比如说你的例子吧,虽然你写出来没有语法错误。但是,嘿嘿,如果你用Chong min=new Ming()弄了min出来,你说min.cout()应该输出什么呢?自己试试,试之前先猜猜看。

至于重载嘛,这倒是说得通,因为在同一个类里面,你可以存在同名但不同参数的static方法。但是呢,我们一般说的重载是包括了继承中出现的重载。而我们已经知道了static是属于类的,不参与继承,所以导致的就是static方法在继承体系里面不可重载了。

总的来说呢,嗯,你只是概念不清晰而已,因为static根本就没有重写之说。static方法引用的时候应该用类名来引用,而不是对象。同时static方法不参与继承,所以在继承体系里面也不存在重载的说法。

热心网友 时间:2022-05-16 16:16

你演示的代码并不是子类重写了父类的静态方法,而是:子类中有一个和父类重名的静态方法,导致父类的静态方法被隐藏了。其实你子类写一个和父类重名的成员变量也是这种情况。
隐藏和重写区别在于,当你使用多态的时候(父类引用指向子类实例),如果是隐藏的情况,那么这个对象调用出来的将是父类的内容。如果是重写的情况,这个对象调用出来的将是子类的内容。例如父类和子类有重名的变量,但是变量值不同,那么你通过多态创建出来的对象调用这个变量时将会调用父类的变量(隐藏)。如果子类中有重写父类的方法,那么通过多态创建的对象调用方法的时候将会调用子类的重写方法(重写)。
在你的例子里,你去试试用多态创建一个子类对象,调用一下静态方法,你就知道是不是重写了。。。(继承中静态方法的隐藏存在*条件,子类中的方法的访问修饰符的权限要比父类更弱,同时子类方法的返回值类型要兼容父类的返回值类型才能成功隐藏父类的静态方法~~~这个*条件和重写基本一样,如果你用intellj分别跑一下错误的格式的话,静态方法给出的提示信息是无法成功隐藏父类方法,非静态方法给提示是无法成功覆盖【重写】父类方法)

热心网友 时间:2022-05-16 16:17

可以重载!但是不可以重写(即覆盖)!
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com