方法重写问题

方法重写问题

老师,尽管子类可以重写父类的方法,只要返回值、方法名、参数列表完全一致。

但是,方法的重写是面对父类中,public 修饰的属性和方法可以呢?还是private修饰的属性和方法可以呢?

还是在父类中,private修饰的属性和方法不可以在子类重写?

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

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

4回答
吃吃吃鱼的猫 2019-04-27 15:55:45

同学你好,你的理解是正确的。

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

吃吃吃鱼的猫 2019-04-27 14:55:18

同学你好,你的想法是正确可行的呢~

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

  • 提问者 鱼儿0001 #1
    只是这样做,不算方法重写吧?
    2019-04-27 15:03:06
吃吃吃鱼的猫 2019-04-27 14:04:00

针对同学开始的问题,老师在这里重新做出以下解释哦~

首先同学要知道,

private:表示私有,私有的意思就是除了自己的类之外,任何人都不可以直接使用,包括它的子类。

顾名思义,方法重写面对的是:父类中public修饰的方法,原因如下:

对于父类中定义为private的方法,子类是继承不到的。这里有个形象的例子可以说明:

儿子没有继承到父亲的一百万财产,所以无法重新定义这一百万财产去怎样使用。

由此可以推断出,在Java中,子类没有继承到父类私有的方法,也就无法重写父类中的私有方法。


重写属性:在之前的问题中,同学问过相关问题哦。这里老师再重复一遍~

父类中public修饰的属性,在子类中能够被继承,也能被重新定义与赋值。

这种特性在Java中虽然没有给出专业的名词解释,但在这里,同学是可以把它看成是属性重写的。

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

  • 提问者 鱼儿0001 #1
    那老师,父类的私有属性和方法不可以被子类继承,那么,能不能在子类中定义一个和父类相同的私有属性和方法,算是我子类新的属性、方法。就是说子类不重写父类私有的属性方法,但是子类自己有自己的私有属性方法,正好和父类的类型方法名返回值都相同。类似于爸爸有100万私有财产儿子继承不了,但是儿子自己也有一笔100万的私有财产。
    2019-04-27 14:38:01
好帮手慕小班 2019-04-25 18:49:28

同学你好  在Java中,所有的private方法默认是final的,即不可继承的。例如:

public class A {    private void print() {
       System.out.println("A");
   }    public static void main(String[] args) {
       A a = new B();
       a.print();
       B b = new B();
       b.print();
   }
}

class B extends A {    public void print() {    
       System.out.println("B");
   }
}

最后的结果是:

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

所以当B继承A时,A的private方法print()不被B继承。

而B中的public方法print()相当于B添加的一个方法,不属于重写。

在重写方法时,需要遵循以下的规则: 
(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写。
(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写。
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限,而private权限最小。

(四)在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,但是抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。

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


  • 提问者 鱼儿0001 #1
    老师,我都没有看懂你写的例子,比如 A a = new B(); a.print(); B b = new B(); b.print(); 这是什么啊?在A类里,实例化对象a,又跑出B: A a = new B(); 这是什么啊?难道不应该是:A a=new B();? 老师请重新解释我的问题,我看不懂你的上述解释,谢谢!
    2019-04-26 19:12:32
  • 好帮手慕小班 回复 提问者 鱼儿0001 #2
    同学你好,非常抱歉 A a = new B(); a.print(); B b = new B(); b.print(); 的内容属于向上转型,同学会在后面的课程中学习,public修饰的方法可以重写,属性不是重写是重新定义。private修饰的方法不可以重写,属性属于私有,也不可以重写。 如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
    2019-04-26 19:44:37
  • 提问者 鱼儿0001 回复 好帮手慕小班 #3
    老师,那你就举一个对我目前来说,理解的了的例子啊。我就是不懂才问,你的回答你自己看看,就跟没回答一样,你的回答就是把我的疑问转成了肯定性的陈述句,能别这么敷衍吗?
    2019-04-27 10:36:56
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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