方法的重载与重写
在Java中,以下关于方法重载和方法重写描述正确的是?
A:方法重载和方法的重写实现的功能相同。
B:方法重载出现在父子关系中,方法重写是在同一类中。
C:方法重载的返回值类型必须一致,参数项必须不同。
D:方法重写的返回值类型必须相同。(或是其子类)
选一项,大神帮忙,明天就要考试了-_-| 展开
2、重写: 也叫覆盖,指在子类中定义一个与父类中方法同名同参数列表的方法。因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。重写一般是指父类和子类之间,子类重写了父类的一个方法,当然方法名是一样的,而且不能改变父类方法的返回值,比如说父类是返回String,子类重写了这个方法,想返回一个int,那是不行的,也得返回String。
A,方法的重载和方法的重写有本质的区别,重写是重写父类的方法,直接覆盖父类的方法,而方法的重载是方法名相同,参数列表,返回值不同,所以错了
B,方法的重写必须出现在父子关系中,方法的重载必须在同一个类中(说反了)
C,描述错误,方法的返回值可以不一致,但参数列表必须不一致(也就是类型不同,参数个数不同)
class A{
public void display(int a)
{System.out.println(“数字是”+a);}
publlic void display(char a)
{System.out.println(“字符是”+a);}
public void display(String s)
{System.out.println("字符串是"+s);}
}
这样一来,通过对不同类型的参数对比,java就能自动选用合适的方法,而不用分别声明。
/////////////////////////////////////////
方法重写:父类有方法A,子类为实现自身特殊化需求,对父类的方法进行改写的手段,也是同名,区别是一个是父类的方法,一个是子类的方法(参数也要一样)。例如
class A{
public void display(int a)
{System.out.println(“数字是”+a);}
publlic void display(char a)
{System.out.println(“字符是”+a);}
public void display(String s)
{System.out.println("字符串是"+s);}
}
class B extends A
{
public void display(int a)
{
System.out.println(a+1);
}
}
这样以来,对整型数,A将它显示出来,B将它加1再显示出来。大体上就是这个 意思。
具体还有一些需要注意的地方:
对于方法重写:
(1) 子类的方法的名称及参数必须和所覆盖的方法相同
(2) 子类的方法返回类型必须和所覆盖的方法相同
(3) 子类方法不能缩小所覆盖方法的访问权限
(4) 子类方法不能抛出比所覆盖方法更多的异常
对于方法重载:
(1) 方法名必须相同
(2) 方法的参数名必须相同
(3) 方法的返回类型和方法的修饰符可以不相同
这样可以么?
方法的重载和重写实现的功能是一样的吗?
方法的重载出现在父子关系中应该是对的,方法重写则不可能是同一类的吧?
方法重载与返回值无关,参数项必须不同,方法重写的返回值类型必须相同,
--------------------------------------
最后一个应该是对的,但A不知道对不对,方法重载和重写实现了相同的功能吗?
方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
详细的说明为:
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常IOException,但是在重写这个方法的时候不能抛出Exception异常,因为Exception是IOException的父类,只能抛出IOException的子类异常。
方法的重写规则
1)参数列表必须完全与被重写方法的相同;
2)返回类型必须完全与被重写方法的返回类型相同;(备注:这条信息是标准的重写方法的规则,但是在java 1.5 版本之前返回类型必须一样,1.5(包含)j 版本之后ava放宽了限制,返回类型必须小于或者等于父类方法的返回类型 )。才有了
子类返回类型小于等于父类方法返回类型。在java里面这个怎么样都是正确的,请小伙伴谨记。
3)访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
4)父类的成员方法只能被它的子类重写。
5)声明为final的方法不能被重写。
6)声明为static的方法不能被重写,但是能够被再次声明。
7)子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
8)子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
9)重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
10)构造方法不能被重写。
11)如果不能继承一个方法,则不能重写这个方法。
广告 您可能关注的内容 |