其他分享
首页 > 其他分享> > 小芳同学的错题总结(十)

小芳同学的错题总结(十)

作者:互联网

1.现在有如下一段代码

public class Test {

public int aMethod() {

static int i=0;

i++;

return i;

}

public static void main(String args[]) {

Test test = new Test();

test.aMethod();

int j = test.aMethod();

System.out.println(j);

}

}


A  编译通过,程序输出1      B 编译通过,程序输出0

C  编译失败                          D  编译通过,程序输出2

答案:C

umm....,这道题,还是好好总结一下,首先,是不存在静态局部变量这个概念的,所以一看到static int i=0;这句代码,这题就已经知道答案了,选C。静态变量存放在方法区中,而方法内部中的局部变量是存在栈中。

2.题目:类Parent和Child定义如下:
1 .class Parent{
2. public float aFun(float a, float b) { }
3 .}
4 .class Child extends Parent{
5 .
6 .}
将以下哪种方法插入行5是不合法的。( )

A  float aFun(float a, float b){ }             B  public int aFun(int a, int b) { }

C  public float aFun(float p, float q){ }   D  private int aFun(int a, int b){ }

答案:A

这道题A错误,是因为A的权限比父类中aFun权限低,不符合方法重写的规则也不符合方法重载的规则,所以A是不合法的,而B、D为什么正确呢,因为它们随让不符合方法重写的规则,但它们符合方法重载的规则,所以是合法的,而C符合方法重写的规则,故也是合法的。

我还是好好总结一下方法重载和方法重写吧,方法重写,怕下次又栽跟头

方法重载:方法名相同,参数列表不同(参数的个数,参数的类型,参数传递的顺序(针对列表中有不同的参数类型)),下图解释参数传递的顺序(针对列表中有不同的参数类型)的意思

用处:方法重载通常用于创建完成一组任务相似但参数列表不同,通过参数列表的不同来决定调用哪一个函数。

注意事项:①返回类型、修饰符可以相同,也可不同。可以结合下面的图来理解

这些都是正确的,属于方法重载

                  ②既可以发生在普通方法、构造方法上,可以发生在同类中,也可以发生在父子类中。红色字体要注意,这是极易被忽视的易错点。

方法重写(方法覆盖):两个方法的返回值类型、方法名、参数列表相同,对于访问权限,子类的权限应大于或等于父类中的权限,最好跟父类权限一致较好。通过下图中的例子来理解一下

这样的重写是正确的。

当子类重写父类方法时低于父类的权限,编译时会报错。

当子类重写父类方法时,返回类型不同时,也会出现编译报错。

当子类重写父类方法时,参数列表不同,虽然程序正确但已经不是方法重写了而是方法重载了。

 

用处:用于需要对所继承的父类方法进行扩展。

注意事项:①两个方法的返回值类型、方法名、参数列表相同(参数列表不同就不是方法重写了,而是为方法重载了)

                  ②子类的权限应大于或等于父类中的权限,最好跟父类权限一致较好。

宝剑锋从磨砺出,梅花香自苦寒来。--冯梦龙

加油!小芳同学

标签:同学,权限,int,小芳,float,方法,错题,父类,重写
来源: https://blog.csdn.net/qq_50074343/article/details/120617770