此选择题的答案不理解

此选择题的答案不理解

选择题让任选择一项正确的方法重写答案是第一个方法可以重写,其他的两个不可以,为什么?

static是静态的,被它修饰的就是静态方法,除了存储信息共享外,也没有特别之处。

至于final,学到目前课程的知识,还没有对final修饰方法做出具体解释,我当然不懂了.

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

正在回答 回答被采纳积分+1

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

8回答
好帮手慕阿莹 2019-04-29 19:19:31

1、静态方法在子类中可以通过隐藏父类方法的方式重新实现:

如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。

如下图所示,如果我们给子类的test()方法加上注解@Override 就会报错(该注解可以验证是否是重写的父类或接口中的方法)

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

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

如果去掉该注解,这个test()方法是可以使用的:

package test03;
 
public class C {
    public static void main(String[] args) {
        A a =new B();
        a.test();
        B b = new B();
        b.test();
    }
}
package test03;
 
public class A {
    public static void test() {
        System.out.println("这是父类的静态方法");
    }
}
package test03;
 
public class B extends A{
 
    public static void test() {
        System.out.println("这是子类的静态方法");
    }
}

这里同学需要记忆一下,目前我们只能通过这个方法类验证这个结论,至于为什么,这个确实是java语法规定的。同学这里记住就可以的。

2、重写方法的返回值应该与父类方法相同或者是父类方法返回值的子类

比如,

现在有Animal类和Cat类,Cat是Animal的子类(这里我们用他们做返回值来测试)

package test03;

public class Animal {

	public Animal() {
		super();
		// TODO Auto-generated constructor stub
	}
	
}
package test03;

public class Cat  extends Animal{

	public Cat() {
		super();
		// TODO Auto-generated constructor stub
	}
	

}

现在我们有父类A和子类B

比如我们的父类A中有一个test方法,返回值是 

package test03;
 
public class A {
      
    public Animal test() {
     Animal animal = new Animal();
         return animal;
    }
}

这个时候,子类B要重写这个方法,请问B重写该方法的返回值可以是什么?

package test03;
 
public class B extends A{
 
   /* @Override
    * public Animal test() {
       Animal animal = new Animal();
       return animal;
    }*/
	@Override
    public Cat test() {
    	Cat cat = new Cat();
        return cat;
     }
}

可以看到子类重写这个方法的时候,返回值可以是Animal,也可以是Animal的子类Cat。

但假如父类A中,返回值写的是Cat,那么子类B重写该方法的时候,返回值可以比Cat的类型更大吗?答案是不可以。同学可以验证下。

3、静态方法和最终方法不能重写这里同学现在要记住就可以了,就好比数学规定 1小于2一样哦。

4、同学现在可以先记住哦,同学现在就像在学习骑自行车,不必现在就要掌握如何组装自行车。现在同学可以多多练习。

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


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

  • 提问者 鱼儿0001 #1
    感谢老师的细致解答,尽管我看的还是云里雾里,如 A a =new B();,玛雅这是啥都不清楚,还有:可以看到子类重写这个方法的时候,返回值可以是Animal,也可以是Animal的子类Cat。 但假如父类A中,返回值写的是Cat,那么子类B重写该方法的时候,返回值可以比Cat的类型更大吗。我都看得云里雾里。这块儿的知识,以现今学的课程都不理解。这就是我说的咱们的课程和练习有时不匹配。不过还是谢谢老师了,等学了后面的知识再回头看吧
    2019-04-30 17:41:09
  • 好帮手慕小班 回复 提问者 鱼儿0001 #2
    同学你好,A a=new B();这个是子类对象指向父类引用,同学可能在学习了java多态后就能理解了!关于返回值类型同学在学习了后面的课程后,可能会更容易理解一些! 继续加油! 祝: 学习愉快~
    2019-04-30 19:14:55
  • _NAVL_ #3
    就业课有介绍注解的定义和使用吗?
    2019-05-07 19:23:14
吃吃吃鱼的猫 2019-04-28 19:45:34

同学的意见已经反馈给相关人员,他们会再次核查一下。

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


  • 提问者 鱼儿0001 #1
    怎么办,现在对此题的静态方法和最终方法不能重写还是不理解,看别的老师说这里的知识点涉及到java的多态向上转型什么的。。。对这两句话:”但静态方法在子类中可以通过隐藏父类方法的方式重新实现。 重写方法的返回值应该与父类方法相同或者是父类方法返回值的子类”也还是不懂。在现阶段课程里也没有讲,- -!,我现在对静态方法不能重写理解的还是一锅粥,对子类重写父类方法的理解只能到课程里讲的:方法名、参数、返回值必须完全一致。的这种理解程度。。。。什么是父类方法返回值的子类,看的都晕。。。。
    2019-04-29 16:28:55
吃吃吃鱼的猫 2019-04-28 11:49:18

同学你好,

我们之前审核过题目,有些题目可能比较综合,稍微难一些。如果同学遇到超纲的问题,可以给我们指出来,我们也会非常感谢哦~

我们也会把同学的意见反馈给相关人员,让他们再次核查一下呢~

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


  • 提问者 鱼儿0001 #1
    不知道该不该叫做超纲。反正就是以现阶段知识不能理解的练习题,咱们的课程里有不少。就感觉咱们制作课程的和制作练习题的肯定不是同一个人,做练习题的根本不清楚现阶段学生的知识存储在什么水平。 像这道练习题,老师的讲解我就看不懂,有一些明显没有学到的知识点。
    2019-04-28 12:03:33
  • 提问者 鱼儿0001 #2
    只要问题不大,我自己留点心,然后不懂的问老师,哪怕最后还是不会,我可以先放着,过两天再重新看看、练练,再跟老师多沟通,效果一定会好些。
    2019-04-28 12:08:26
吃吃吃鱼的猫 2019-04-27 15:26:39

同学误会了~有问题当然可以随时提问。

只是在同学学习知识的同时,老师是希望能够教每位同学一些学习技巧。使每位同学在学习编程的路上能够走的更长更远。

如果同学本身总结出了好的,适合自己的学习技巧,那是真的很棒呢,老师也很高兴和佩服。

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

  • 提问者 鱼儿0001 #1
    老师,其实你的回答,以我目前所学看不懂- -!等我再学学,后面返回来再看看。 咱们的课程和练习很多时候脱节,课程还没教到的知识,在选择题或编程练习里就大面积涉及,导致课程听懂了,题不会做,希望咱们把这两块能同步一下。
    2019-04-28 11:35:52
吃吃吃鱼的猫 2019-04-27 14:49:15

同学你好,

  1. 老师的意思是,父类中的static方法在子类中叫做重新实现,不叫重写。因为此时,子类中的静态方法与父类中静态方法除了方法名称相同,但二者之间是没有任何联系的。

  2. 同学需要明白,方法重写时可以修改返回值,但是方法名、参数类型、参数个数是不可以修改的;

    修改返回值有一个条件是:重写方法的返回值应该与父类方法的返回值相同或者是父类方法返回值的子类;

    那么,这时怎么理解呢?

    我们看下面的例子:

   public Object test(){return null;}//父类test方法
   public String test(){return null;}//子类test方法

      我们可以看到,父类test方法,子类test方法方法名相同,也都没有参数,看到这里,发现是符合方法重写的定义的。

      我们再接着往前看,父类test方法的返回值是Object,子类test方法的返回值是String。

      现在我们发现,两个方法的返回值是不同的,那它到底符不符合方法重写的规范呢?

      我们回过头再看关于方法重写时修改返回值的描述:“重写方法的返回值应该与父类方法的返回值相同或者是父类方法返回值的子类。”

     把这句话拆开来读,重写方法的返回值应该与父类方法的返回值相同,这时父类test,子类test返回值不同,不满足。但是后面还有:“或者是父类方法返回值的子类。”

    那么这个条件满足吗?

    我们知道,Object类是所有类的父类,这里的String也是它的子类。

    重写的test方法的返回值是Object的子类,这时,是满足重写方法的条件的。

    这里老师给同学分享一个学习编程的小技巧,当我们看着视频学习时,跟着视频敲一遍代码,这时还是会有很多疑问的。因为看第一遍不明白怎么回事是很正常的。老师也是这样过来的呢~

    不过这时可以把问题先记录下来,再带着疑问多去看几遍视频,这时,不明白的地方会格外注意,听课的效率也会提高很多,对问题也会有更深刻的理解。最后,总结一下这节视频的重点,主要讲了什么内容,可以在纸上画张关于本节课程的知识体系的图解,帮助加深印象。如果这时,有什么不明白的,同学在问答区提问,老师会很乐意为同学解答~

     这段时间同学的进步很大,老师也都在陪着同学一起成长~

     老师以后也希望同学能够更快更强的吸收新的知识~

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

  • 提问者 鱼儿0001 #1
    你的言外之意是我得等到画完草图总结完后,才有资格问问题? 你的小技巧因人而异,不是每个人都只适合一种学习方式。
    2019-04-27 15:01:48
  • 提问者 鱼儿0001 #2
    谢谢你的建议,但是我每次提问题,至少都是看了两遍后才问的,也有跟着老师打代码,老师你就别瞎操心了,好好回复我就是对我最大的褒奖。
    2019-04-27 15:20:55
吃吃吃鱼的猫 2019-04-27 10:32:17

同学你好,

  1. 如果一个子类定义了一个和父类静态方法中相同的方法(即方法名,参数和返回类型相同),则称子类通过隐藏父类方法的方式对此方法进行了重新实现。

  2. 重写方法的返回值应该与父类方法相同或者是父类方法返回值的子类。

    这里举个例子,如下所示

   public Object test(){return null;}//父类中的test方法,返回值为Object类型,Object是所有类的父类。
   public String test(){return null;}//子类重写父类的test方法,返回值是String,String是父类方法返回值Object的子类,这里可以作为重写方法的返回值。

    3.同学的理解是正确的。在父类中,被final和static修饰的属性也不能在子类重写。

  • 提问者 鱼儿0001 #1
    老师,1、照你的意思是,父类中的static方法在子类里是可以重写的?只要符合重写的规定,即方法名,参数和返回类型相同? 2、老师所举的例子,方法名、参数相同,但是返回值不同,这不算重写吧? 还有,注释里的话理解不了:Object是所有类的父类。String是父类方法返回值Object的子类。这都是什么啊,返回值又是父类又是子类的。
    2019-04-27 10:54:32
吃吃吃鱼的猫 2019-04-26 19:29:05

同学你好,

  1、Java关键字final本身有“这是无法改变的”或者“终态的”含义,它修饰成员方法时无法被重写。可以从两个思路考虑这种语法规定:设计或效率。

        第一、使用final将方法锁定,防止任何类重新修改它的实现。

        第二、高效。当调用final方法时,Java内部会转入一种高效机制,这时,会提高执行效率。

  2、在Java中静态方法是类方法,被所有对象所共享,通过类名.方法名调用,这时重写被共享的方法没有任何意义。  

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

  • 提问者 鱼儿0001 #1
    老师,解析里,这几句话怎么理解,我不懂:1、静态方法在子类中可以通过隐藏父类方法的方式重新实现。 2、重写方法的返回值应该与父类方法相同或者是父类方法返回值的子类。
    2019-04-26 19:41:14
  • 提问者 鱼儿0001 #2
    并且,在父类中,被final和static修饰的属性是不是也不能在子类重写?
    2019-04-26 19:42:52
好帮手慕小班 2019-04-25 18:55:40

同学你好    1、在java中,被final关键字声明的方法,不可重写,这是java的语法规则。

2、静态方法除了同学理解的存储信息共享外,也不能重写!

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

  • 提问者 鱼儿0001 #1
    老师,我就是不懂才问的,然而你的回答就是把我的疑问又复述了一遍,老师的回答类似于问:为什么可以吃西红柿。回答:因为这是植物学规定的,就是可以吃。 我不懂才问的,请展开解释,别敷衍我好吗?
    2019-04-26 19:03:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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