都是SCJP上的基础题,有些东西觉得会其实还是不会!//这里要用double,不用short,但是返回值已经强制转化了啊,为什么short是错的?
public static short methodA(byte x, double y)
{ return (short) x/y * 2; }
第二题
String test = "java";
StringBuffer test2 = new StringBuffer("java");
String test3 = new String("java"); proceeReplace(test);
proceeReplace2(test2);
proceeReplace3(test3); System.out.println(test);
System.out.println(test2);
System.out.println(test3);
//只有StringBuffer 变了,其他都没变,我知道string不能改变但这和"java".replace('j','i')有啥区别? public static void proceeReplace (String a)
{
System.out.println("``"+a);
a.replace('j', 'i');
}
public static void proceeReplace2 (StringBuffer b)
{
b.append("c");
}
public static void proceeReplace3 (String c)
{
c.replace('j', 'i');
}第三题关于重写的概念
class Destinations {
public float getNum()
{
return 3f;
}
}public class Parcel9 extends Destinations{
// public float getNum() {return 3.0f;}
// public void getNum (double d) { }
// public double getNum (float d) {return 4.0f; }
public void getNum () { }// 错的,为什么错?
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)
其他几个为什么对?
public static void main(String[] args) {
}
} 先谢谢了
public static short methodA(byte x, double y)
{ return (short) x/y * 2; }
第二题
String test = "java";
StringBuffer test2 = new StringBuffer("java");
String test3 = new String("java"); proceeReplace(test);
proceeReplace2(test2);
proceeReplace3(test3); System.out.println(test);
System.out.println(test2);
System.out.println(test3);
//只有StringBuffer 变了,其他都没变,我知道string不能改变但这和"java".replace('j','i')有啥区别? public static void proceeReplace (String a)
{
System.out.println("``"+a);
a.replace('j', 'i');
}
public static void proceeReplace2 (StringBuffer b)
{
b.append("c");
}
public static void proceeReplace3 (String c)
{
c.replace('j', 'i');
}第三题关于重写的概念
class Destinations {
public float getNum()
{
return 3f;
}
}public class Parcel9 extends Destinations{
// public float getNum() {return 3.0f;}
// public void getNum (double d) { }
// public double getNum (float d) {return 4.0f; }
public void getNum () { }// 错的,为什么错?
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)
其他几个为什么对?
public static void main(String[] args) {
}
} 先谢谢了
楼主【yaonet2008】截止到2008-07-10 17:07:25的历史汇总数据(不包括此帖):
发帖的总数量:41 发帖的总分数:1490 每贴平均分数:36
回帖的总数量:86 得分贴总数量:13 回帖的得分率:15%
结贴的总数量:28 结贴的总分数:960
无满意结贴数:0 无满意结贴分:0
未结的帖子数:13 未结的总分数:530
结贴的百分比:68.29 % 结分的百分比:64.43 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
public static short methodA(byte x, double y)
{ [color=#FFFF00]return (short) x/y * 2; }[/color]
改为return (short) (x/y * 2)
2.String的replace会产生一个新的String,不改变原来的String。
3.返回的类型必须与父类一致(5.0开始,好像也可以是父类返回类型的子类型)
第二题:"java".replace('j','i')返回的是一个新对象,而java这个字符串本身没有变
第三题:// public float getNum() {return 3.0f;}
// public void getNum (double d) { }
// public double getNum (float d) {return 4.0f; }
重写,什么叫重写?是说名称 参数 返回值 三个同时决定。
上面三个由于定义参数所以不是重写,所以是对的。
public void getNum () { }// 错的,为什么错?
这里错了,是因为JAVA会认为名称 参数满足重定义的条件时,他会认为你要重定义该方法,所以你的返回类型也必须和父类相同,而你现在返回类型是void ,当然报错了。为什么要这么处理呢?是因为如果你用多态调用a.getNum()的时候,它不能确定是调用父类还是调用子类的方法,所以你必须重定义。
可以转
错在少了后面的括号
return (short) (x / y * 2);
第三题:重写的概念,第一重写在两个类中,
重写的方法的修饰符与原方法比较是越来越开放的,
返回值类型是相同或者兼容的,方法名相同,
参数列表是相同的包括个数,顺序,类型,
那个float和void是不兼容的类型
取代的原始方法有完全相同的签名。这就包括了返回值。如果你在子类中创建了一个有同样
名字和签名但是有不同返回值的方法,你将会得到一个跟上例同样的错误信息:
method redefined with different return type: void amethod(int)
was int amethod(int)
编译器认为这是错误的尝试方法重载,而不认为是方法重写。static 方法不能被重写
----------------SCJP认证指南上的原话
第二题 String test = "java";开辟了一个堆来存放"java"这个字符串对象,开辟了一个栈来存放基本类型test,栈中存放了对象的地址,因此test指向了堆中的对象;
当执行"java".replace('j','i')时,另开辟了一个堆来存放改变后的对象(也就是在新开辟的栈中存放了对象"iava");而原来的堆中的内容就没有改变;所以就这样了....
2.String对象不可变,不能进行扩充或修改,在执行"java".replace('j','i')后产生了新对象,不会改变原字符串
3.在实现多态的时候有几个条件是必须满足的,其中有一条是基类和派生类中方法的返回类型必须相同或者必须是协变的(子类方法的返回类型可以是父类方法返回类型的子集)
请注意:方法的返回对象类型不是签名的一部分!方法的签名是由方法的名称,形式参数的类型及其顺序决定的!