我在考试中练习了这个练习,但我找不到解决方法。所以我得到了这个:
public class X {
public int f(A a, int n) {
n = n + 1;
return 1;
}
public int h(B b, int n) {
try {
n = n + 3;
return f(b,n);
} catch(Exception e) {
return n * 4;
}
}
}
public class Y extends X {
public int f(A b, int n) {
return n + b.i();
}
public int f(B b, int n) {
return 3*n - b.i();
}
}
public class Z extends Y {
public int f(B b, int n) {
return f((A)b,n) + super.f(b,n);
}
}
public class A {
public int i() {
return 7;
}
}
public class B extends A {
public int i() {
return super.i() + 6;
}
}
static class E extends RuntimeException {
}
我需要弄明白:
new Z().h(new B(), 3)
解决方案是19,但我不明白为什么使用类Y的f方法而不是类Z的f方法。
答案 0 :(得分:4)
被调用方法的签名是在编译时确定的,而不是运行时。致f
的电话在X
' h
:
return f(b,n);
如果您查看X
,则可以调用的唯一f
就是f(A, int)
。它无法访问f(B, int)
。因此,它通过调用f(A, int)
进行编译。 Y
覆盖f(A, int)
而Z
覆盖Y
,Z
个实例(包括Y
个实例)将使用f(A, int)
Y
的版本。因此使用f(A, int)
' s if($_SERVER['REQUEST_METHOD']=='POST') {
$image = $_POST['image'];
$name = $_POST['name'];
$rId = $_POST['rId'];
$path = "uploads/$rId.png";
$sql = "insert into room_info (r_id,url,name) VALUES ('$rId','$path','$name')";
if(mysqli_query($con,$sql)){
file_put_contents($path, base64_decode($image));
echo "Successfully Uploaded";
}
mysqli_close($con);
} else {
echo "Error";
}
。
答案 1 :(得分:3)
这不简单,但你必须看到类X
f(A a, int n)
为此定义的唯一方法是public class Y extends X {
public int f(A b, int n) {
return n + b.i();
}
}
,它将调用它(或使用此签名覆盖方法)。它是:
public int f(A a, int n)
Z类不会覆盖<?php
$latlong[] = [1,2];
$latlong[] = [3,4];
$latlong[] = [5,6];
$latlong[] = [7,8];
$latlong[] = [9,10];
$latlong[] = [11,12];
$latlong[] = [19,110];
$latlong[] = [21,132];
$off = 3;
for ($i=0; $i < count($latlong); $i+=$off){
if(count($latlong) - $i <= $off){
$last_element = end($latlong);
}
print_r( array_slice($latlong, $i,1));
}
print_r($last_element);
?>
。