方法重载与重写

方法重载与重写

http://img1.sycdn.imooc.com//climg/5cc3ce6b0001a71a18010710.jpg

此题让选择错误的一项,是B。private访问权限小于public,错误。

老师,A选项是重写吗?

C、D选项是方法名相同参数列表、返回值不同,这肯定是重载吧?

但是,D选项的返回值是double类型,参数是float类型的变量d,返回的也是float类型的数值:return 4.0f。

返回值不是double类型啊,这怎么回事?

正在回答

登陆购买课程后可参与讨论,去登陆

8回答

你好!对于我们当前定义的类,protected是不能修饰的,会出现如下的错误提示,要求移除无效的修饰符

http://img1.sycdn.imooc.com//climg/5cce50520001309d05430109.jpg

但是后面我们会学习到内部类,也就是在类的内部再嵌套定义一个类,protected是可以修饰内部类的。关于内部类的知识会在《Java多态》中学习到。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕珊 2019-05-04 10:18:53

你好!1、如果类前省略public,默认类只能在同一包内访问,没有default这个访问修饰符。类前不能加private,私有类是不能被访问的,因此没有意义。

2、关于打印alpha,如果Alpha重写了toString()方法,那么打印出来的内容就是toString()方法返回的内容,否则就是地址。同学可以将如下代码运行一下看看效果。

public class Alpha {
String name;
int age;
public Alpha() {}
public Alpha(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Alpha [name=" + name + ", age=" + age + "]";
}
}
class Test {
public Alpha check() {
Alpha alpha=new Alpha("小明",15);
return alpha;
}
public static void main(String[] args) {
Test test=new Test();
Alpha a=test.check();
System.out.println(a);
}
}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 鱼儿0001 #1
    感谢老师的回复,按照你的代码,我手打了一遍并且运行成功,谢谢! 老师,你可能忘了我之前的问题里,还问了能不能用protected修饰类,老师能用protected修饰类吗?
    2019-05-05 10:21:37
好帮手慕阿满 2019-04-30 19:04:29

同学你好,关于同学的问题回答如下:

1、public是访问修饰符,在之前的两小节讲到,

http://img1.sycdn.imooc.com//climg/5cc829a40001893503360079.jpg

这里的public是修饰类的,可以省略。在《Java初始》中,使用cmd编译Java程序时,就没有写public修饰符,如:

http://img1.sycdn.imooc.com//climg/5cc82a030001f84208030380.jpg

2、check()方法不能当做主方法,这里只是举了一个以Alpha作为返回值的方法,并没有测试,所以省略没写主方法。可以加上,如:

http://img1.sycdn.imooc.com//climg/5cc82ba20001538006760618.jpg

祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,那么:1、public写在类前,是否具有访问权限的作用,如可以跨包啥的,比private权限大啥的?2、我看了老师的代码,写的很好。但是,我奇怪的是,return alpha,返回的可是对象。打印test.check(),会打印出来什么?
    2019-04-30 19:35:48
  • 好帮手慕阿莹 回复 提问者 鱼儿0001 #2
    1、有,用public修饰的,可以跨包使用,只是用这个类的时候需要导包。 2、打印出来的就是返回的这个alpha对象。 如果我的回答解决了你的问题,请采纳。祝学习愉快。
    2019-05-01 16:42:35
  • 提问者 鱼儿0001 回复 好帮手慕阿莹 #3
    老师,1、省略类前的public,默认是不是default,类前的访问修饰符的使用,与在对属性和方法的使用一样?那么,能不能在类前用protectd、privare修饰? 2、return alpha,返回的是Alpha类的对象。打印test.check(),会打印出来什么?老师你说会出这个对象,我当然知道会打印出这个对象,就是具体打印出alpha这个对象的什么?是"alpha"?还是alpha里面的内容:"小明",18??
    2019-05-02 10:31:34
好帮手慕阿满 2019-04-29 17:44:14

同学你好,这里讲Alpha定义为一个类,然后定义一个Test类,在Test类中check()方法中,返回值类型为Alpha。如:

http://img1.sycdn.imooc.com//climg/5cc6c6c0000193d105280493.jpg

这里只是举了一个小例子。

祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,我照着你的代码打了一遍,有些问题:1、你省略了public ,写成了class Alpha,以我目前所学不理解,怎么能省略public? 2、在测试类里,我就更晕了。竟然没有public sratic void main(String[] args){},是public Alpha check(){},老师啊,这个以Alpha作为返回值的方法能当主程序的入口用吗?
    2019-04-30 16:07:57
吃吃吃鱼的猫 2019-04-28 16:44:57

同学你好,方法分为方法名,方法参数,方法返回值,方法体。

各个部分就像人的头,胳膊,双腿,腰一样,共同组成方法。

但是方法参数和方法返回值就像头和双腿一样,没有什么必然的联系。

方法参数为String类型,与返回值的类型无关,返回值可以定义为任何类型,所以,这里的返回值可以是int类型。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    public Alpha bar(int x){},这是将类作为返回值,老师,请以此方法为例,举一个代码的例子,加深我对以类作为返回值的印象。
    2019-04-29 10:51:11
吃吃吃鱼的猫 2019-04-28 11:34:48

同学你好,

C选项:方法重载与返回值类型无关。所以,这里返回值是int类型还是String类型没有关系。

D选项:数据类型都可以当成返回值。数据类型分为基本数据类型,引用数据类型,这里的类就是引用数据类型。关于数据类型,下面的链接中有更加详细的解释:https://class.imooc.com/lesson/976#mid=23199

F选项:这里老师要说声抱歉,当时一时疏忽,这里的话没有说完整,补充如下。

“方法名称相同的前提下,参数个数,参数类型,参数顺序,只要这三方面有其中的一方面不一样就可以构成方法的重载了。其次,方法的重载和返回值,访问修饰符都没有关系。”

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,你的链接视频我都看过3遍了,你自己也可以看看,然后你自己评测一下,你觉得课程在讲引用数据类型方面讲的详细吗?课程花了多少秒在讲引用数据类型的知识? 还有,C选项里,我不关心是不是方法重载,我关心的是传入的数据是String,那么久应该返回String类型的数值,就是:return "我是德雷克;"可怎么是int类型。我的问题一直在这里,你怎么老是get不到我的问题点?你总在我的问题外回答我。
    2019-04-28 11:59:56
吃吃吃鱼的猫 2019-04-27 15:07:48

同学你好,

第一道题中:

返回的4.0f做了类型转换,在返回时,自动转成了double类型。

第二道题中:

C选项:同学理解的方法重载是正确的。返回值在这里是int类型,String类型都可以当成方法重载。

D选项:任何类都可以作为方法的返回值,包括父类。

F选项:方法的名称,参数个数,参数顺序不同才能构成方法重载,只有返回值不同,不属于方法重载。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,不知道是不是我表达的不清楚,还是怎么回事,跟你沟通你有时看不懂我的问题。C选项看似是方法重载,但参数是String x,返回值类型得是int,我认为错误,返回值类型应该是Stirng类型才对,我的问题就是参数类型是String,返回值得是int,我不理解的地方是这里。 D选项:任何类都可以作为方法的返回值,包括父类。这个课堂上没讲过,具体讲讲吧。 F选项,是方法名相同,参数列表不同能构成方法的重载吧?老师的回答很容易让人理解成方法名也得不同,我引用你的话:"方法的名称,参数个数,参数顺序不同才能构成方法重载,只有返回值不同,不属于方法重载。"
    2019-04-28 10:42:55
提问者 鱼儿0001 2019-04-27 12:31:23

http://img1.sycdn.imooc.com//climg/5cc3d94f0001d7ae13660768.jpg

并且,这个也是方法的重写与重载的选择练习,正确答案是:BCE。

A选项访问修饰符问题,错误。

B 选项:方法名、参数、返回值、访问修饰符一致,是方法重写。

E选项方法名相同参数不同,是方法重载。

C、D、F选项就有点弄不清了,C选项看似是方法重载,但参数是String x,返回值类型得是int,我认为错误,返回值类型应该是Stirng类型才对。

D选项竟然是父类类名,这什么操作?

F选项我认为没问题,方法名、参数相同,但是返回值类型不同,属于方法的重载。但F选项却是错误的,为啥?


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师