正在回答 回答被采纳积分+1
1、静态方法在子类中可以通过隐藏父类方法的方式重新实现:
如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。
如下图所示,如果我们给子类的test()方法加上注解@Override 就会报错(该注解可以验证是否是重写的父类或接口中的方法)
如果去掉该注解,这个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、同学现在可以先记住哦,同学现在就像在学习骑自行车,不必现在就要掌握如何组装自行车。现在同学可以多多练习。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,
老师的意思是,父类中的static方法在子类中叫做重新实现,不叫重写。因为此时,子类中的静态方法与父类中静态方法除了方法名称相同,但二者之间是没有任何联系的。
同学需要明白,方法重写时可以修改返回值,但是方法名、参数类型、参数个数是不可以修改的;
修改返回值有一个条件是:重写方法的返回值应该与父类方法的返回值相同或者是父类方法返回值的子类;
那么,这时怎么理解呢?
我们看下面的例子:
public Object test(){return null;}//父类test方法 public String test(){return null;}//子类test方法
我们可以看到,父类test方法,子类test方法方法名相同,也都没有参数,看到这里,发现是符合方法重写的定义的。
我们再接着往前看,父类test方法的返回值是Object,子类test方法的返回值是String。
现在我们发现,两个方法的返回值是不同的,那它到底符不符合方法重写的规范呢?
我们回过头再看关于方法重写时修改返回值的描述:“重写方法的返回值应该与父类方法的返回值相同或者是父类方法返回值的子类。”
把这句话拆开来读,重写方法的返回值应该与父类方法的返回值相同,这时父类test,子类test返回值不同,不满足。但是后面还有:“或者是父类方法返回值的子类。”
那么这个条件满足吗?
我们知道,Object类是所有类的父类,这里的String也是它的子类。
重写的test方法的返回值是Object的子类,这时,是满足重写方法的条件的。
这里老师给同学分享一个学习编程的小技巧,当我们看着视频学习时,跟着视频敲一遍代码,这时还是会有很多疑问的。因为看第一遍不明白怎么回事是很正常的。老师也是这样过来的呢~
不过这时可以把问题先记录下来,再带着疑问多去看几遍视频,这时,不明白的地方会格外注意,听课的效率也会提高很多,对问题也会有更深刻的理解。最后,总结一下这节视频的重点,主要讲了什么内容,可以在纸上画张关于本节课程的知识体系的图解,帮助加深印象。如果这时,有什么不明白的,同学在问答区提问,老师会很乐意为同学解答~
这段时间同学的进步很大,老师也都在陪着同学一起成长~
老师以后也希望同学能够更快更强的吸收新的知识~
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
同学你好,
如果一个子类定义了一个和父类静态方法中相同的方法(即方法名,参数和返回类型相同),则称子类通过隐藏父类方法的方式对此方法进行了重新实现。
重写方法的返回值应该与父类方法相同或者是父类方法返回值的子类。
这里举个例子,如下所示
public Object test(){return null;}//父类中的test方法,返回值为Object类型,Object是所有类的父类。 public String test(){return null;}//子类重写父类的test方法,返回值是String,String是父类方法返回值Object的子类,这里可以作为重写方法的返回值。
3.同学的理解是正确的。在父类中,被final和static修饰的属性也不能在子类重写。
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星