java 的重载和覆盖
发布网友
发布时间:2022-05-12 06:36
我来回答
共4个回答
热心网友
时间:2024-02-18 22:04
怎样才算是一个方法覆盖:
1 首先要保证方法名、参数类型、参数个数、参数顺序完全一样
2 返回类型也必须要一致
3 子类方法不能缩小父类方法的访问权限比如不能由public变成
private了如果可以的话请看下面一段代码会出现什么问题
4 子类方法不能抛出比父类方法更多的异常,只能够相同,或者是父类
方法抛出的异常类的子类。
因为如果可以的话,就会与Java语言的多态机制发生冲突
5 父类的static方法不能被子类覆盖为非static方法 子类可以定义
static方法覆盖父类的static方法 子类不可以定义static方法覆盖父
类的非static方法
6 子类方法覆盖父类方法的前提是,子类必须能够继承父类的特定方法
7 父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的
抽象方法;二是子类重新声明父类的抽象方法。
所以答案1:methodTwo和methodFour覆盖了父类的方法。分析各个方法:因为methodOne不符合规则5,所以没有覆盖。你的methodTwo我认为应该是public static void 不是你发出来的public void void,所以符合规则5,所以methodTwo覆盖了父类的方法。methodThree方法不符合规则5,所以没有覆盖。methodFour符合规则5,所以覆盖了父类的方法。
答案2:重载是在同一个类中,所以子类没有可能重载父类的任何一个方法。原则是:方法名一样。所以父类的四个方法都没有被子类重载。
问题3:根据原则5,可以看出static对方法覆盖有影响,对重载也没有影响。
第四个问题:是覆盖。因为方法名一样,返回类型一样,参数个数和参数类型一样。重载是在同一个类中,所以不是重载。
第五个问题:因为Object有toString方法,而所有的类都是继承自Object,所以每个类中都有一个toString方法,如果我们在类中再写toString方法,就是重载了。覆盖是在父类和子类中说的,也就是平时所说的方法重写。
对于方法重载来说,关键就是参数的类型、参数的个数、参数的顺序至
少有一项不相同。至于修饰符
(private/protected/public/abstract/final/static),返回类型都
无所谓。
热心网友
时间:2024-02-18 22:05
1.首先staic方法不能被覆盖,所以排除static方法的覆盖.
2.再次覆盖发生在子类中(也就是要结合2个类,才能判断是否覆盖),重写发生同一个类中(方法名称相同,但方法签名不同,即参数个数,类型.).
3.所以B类只有方法methodTwo(int i){} 是覆盖A类的methodTwo(int i){}. 2个类均不发生重载
4.第2道题,B类的toString(){}覆盖A类的toString(){},
5.Object类有一个toString()方法,为什么说每一个都会重载它,而不是说覆盖它呢?
我觉得是不是说反了,,应该是说,只要自己提供toString(){}方法就覆盖了Object的toString(){},
应为重载只发生在一个类中.
(一点薄见..)
热心网友
时间:2024-02-18 22:05
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
热心网友
时间:2024-02-18 22:06
http://blog.csdn.net/bnuchampion/archive/2008/01/07/2028119.aspx上面有详细的解释。