小芳同学的错题总结(十)
作者:互联网
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