该代码为什么编译错误:class A { public float getNum () { return 3.0f; public class B extends A { public void getNum(){ } }
时间: 2024-03-12 16:49:49 浏览: 36
这段代码有两个问题:
1. 在类A的getNum方法中,缺少了一个右大括号,导致该方法没有正确结束,应该添加一个右大括号来修复该问题。
2. 在类B中,getnum方法的签名与父类A中的getNum方法不同,应该保持相同的方法签名,即返回值类型和参数列表都应该相同。此外,子类方法覆盖父类方法时,访问修饰符应该不小于父类方法的访问修饰符,因此在类B中,getnum方法的访问修饰符应该是public或protected。修复后的代码如下:
```
class A {
public float getNum() {
return 3.0f;
}
}
public class B extends A {
public float getNum() {
return 0.0f;
}
}
```
在类B中,getnum方法覆盖了父类A中的getNum方法,并且保持了相同的方法签名,返回一个float类型的值。同时,由于父类A中的getNum方法是public访问修饰符,因此在类B中,getnum方法的访问修饰符也应该是public。
相关问题
如果将类B中第2、3、4行替换为public void getNum(double)}}为什么代码又可以正常编译
如果将类B中第2、3、4行替换为`public void getNum(double)`,那么代码仍然可以正常编译,但是这个`getNum`方法不再是覆盖父类的方法,而是在子类中新增了一个`getNum`方法。
在Java中,方法的签名由方法名和参数列表组成。因此,如果子类中的方法与父类中的方法具有相同的方法名和参数列表,则子类的方法将覆盖父类的方法。在这种情况下,子类中的方法应该具有与父类中的方法相同的返回类型或其子类型。子类中的方法还可以使用更宽松的访问修饰符,但不能使用比父类中的方法更严格的访问修饰符。
在这个问题中,由于子类中的`getNum`方法的参数列表与父类中的`getNum`方法不同,因此子类的方法不会覆盖父类的方法,而是在子类中新增了一个方法。这个新增的方法没有返回值,因为返回类型是`void`,并且接受一个double类型的参数。由于这个方法没有覆盖父类的方法,因此不受父类方法的访问修饰符的限制,可以使用任何访问修饰符。
基于 JDBC 实现学校信息的增加和查询功能,实现方法: public void add(School scb) foaa.? ⑤9 Public ArrayList queryO fue.f 其中学校信息采用以上定义的 School 类,数据库为aydb,数据表为sch,包含字段name. 字段 num。 JabcUiile 类提供的的方法为: public class JdbcUtil {
这是一个基于 JDBC 实现学校信息增加和查询功能的代码模板,你可以根据这个模板进行开发:
```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class SchoolDao {
private Connection conn;
public SchoolDao() {
try {
// 加载 JDBC 驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/aydb", "root", "password");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 添加学校信息
public void add(School sch) {
try {
PreparedStatement ps = conn.prepareStatement("insert into sch(name, num) values(?, ?)");
ps.setString(1, sch.getName());
ps.setString(2, sch.getNum());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 查询学校信息并返回结果集
public List<School> query() {
List<School> list = new ArrayList<School>();
try {
PreparedStatement ps = conn.prepareStatement("select * from sch");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
School sch = new School();
sch.setName(rs.getString("name"));
sch.setNum(rs.getString("num"));
list.add(sch);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
// 关闭数据库连接
public void close() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
其中 `School` 类的定义可以参考以下代码:
```
public class School {
private String name;
private String num;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
}
```
使用时可以按照以下方法调用:
```
SchoolDao dao = new SchoolDao();
dao.add(sch); // 添加学校信息
List<School> list = dao.query(); // 查询学校信息
dao.close(); // 关闭数据库连接
```