新手问题(子类如何调用父类)(50分)

  • 主题发起人 主题发起人 youjq
  • 开始时间 开始时间
Y

youjq

Unregistered / Unconfirmed
GUEST, unregistred user!
父类代码如下:
package base;
import java.io.*;
import java.sql.*;
public class db {
Connection conn = null ;
ResultSet rs = null;
String Username="";
String Password="";
String Eamil="";
String Homepage="";
String Signs="";
public db() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e){
System.err.println("mydb():" + e.getMessage());
}
}
public ResultSet executeQuery(String sql){
rs=null;
try{
conn = DriverManager.getConnection("jdbc:odbc:MySQL","root","root");
Statement stmt = conn.createStatement();
//执行数据库查询操作
rs = stmt.executeQuery(sql);
}
catch(SQLException ex){
System.err.println("db.executeQuery:"+ex.getMessage());
}
return rs;
}
public boolean executeUpdate(String sql){
boolean bupdate = false;
rs = null;
try{
conn = DriverManager.getConnection("jdbc:odbc:MySQL","root","root");
Statement stmt = conn.createStatement();
int rowCount = stmt.executeUpdate(sql);
if (rowCount!=0)bupdate=true;

}
catch(SQLException ex) {
System.err.println("db.executeUpdate:" + ex.getMessage());
}
return bupdate;
}
public static String toChinese(String strvalue) {
try{
if(strvalue==null)
{
return null;
}
else
{
strvalue = new
String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}
catch(Exception e)
{
return null;
}
}
}
子类代码如下:
package base;
import java.sql.*;
import java.lang.*;
public class adduser extends db {
public boolean addNewUser(){
boolean boadduser=false;
try{
String sSql = new String("insert into user (regtime,username,password,email,homepage,signs)");
sSql = sSql+" values (SYSDAYE,''+Username+'',''+Password+'',''+Email+'',''+Homepage+'',''+Signs+'')";
System.out.println(sSql);
if(super.executeUpdate(sSql))boadduser=true;
}
catch(Exception ex){
System.err.println("adduser.addNewUser:" + ex.getMessage());
}
finally{
return boadduser;
}
}
public boolean checkUser(){
boolean boadduser=false;
try{
String sSql = "select * from user where username=''+Username+''";
if((super.executeQuery(sSql)).next()){
boadduser=false;
}else
{
boadduser=true;
}
}
catch(Exception ex) {
System.err.println("adduser.addNewUser:= " + ex.getMessage());
}finally{
return boadduser;
}
}
public String getUsername(){
return Username;
}
public void setUsername(String newUsername){
Username = db.toChinese(newUsername);}
public String getPassword(){
return Password;
}
public void setPassword(String newPassword){
Password = newPassword;
}
public String getEmail(){
return Email;
}
public void setEmail(String newEmail){
Email = newEmail;
}
public String getHomepage(){
return Homepage
}
public void setHomepage(String newHomepage){
Homepage = newHomepage;
}
//属性Signs的get/set方法
public String getSigns(){
return Signs;
}
public void setSigns(String newSigns){
Signs = db.toChinese(newSigns);
}
为什么子类中不认识父类中的所有变量和方法如Username,Password等。
难道public class adduser extends db {
不是这样调用的吗?
 
ClassParent
 
什么意思?能具体点吗?
 
看你的这两段代码相当乱....
1) 你的父类似用来干什么的?是用来访问db的吗?
为什么还有Email,homepage之类的字段??
2), 既然userName, password 字段是在父类里面定义的,为什么getxxx/setxxx函数要在
子类里面定义?这是非常不好的。
3) 你确定你需要这样的继承关系,即addUser函数继承自db类?我觉得这样没有任何好处。
你为什么不在addUser里面创建一个db对象来操作呢?
 
to:曹晓钢
1、我的用意非常明白,db类是关于数据库连接的操作,可以被其他连接到此数据库的
java程序调用;
2、你说得有道理,应该将这些变量定义在adduser类中;
3、如果每个数据库操作都要写一个数据库连接那不是造成重复劳动吗。
我现在遇到的问题是这样的,我用javac命令根本编译不了adduser这段代码,原因
是这里用的变量,以及方法没有定义,可这些我都在db类中定义过了,所以我想继承这
些变量以及方法。
麻烦您再次做答。
 
>>2)既然userName, password 字段是在父类里面定义的,为什么getxxx/setxxx函数要在
>>子类里面定义?这是非常不好的。
>2、你说得有道理,应该将这些变量定义在adduser类中;
>3、如果每个数据库操作都要写一个数据库连接那不是造成重复劳动吗。
现在就更乱了。
好像你的思维和我的有些不一样。db类是干什么的?你回答说:db类是关于数据库连接的操作,可
以被其他连接到此数据库的java程序调用.既然db类已经实现了关于数据库连接的调用,你何必又
要在其他调用数据库操作的类中再声明username,password呢?难道你每次数据库调用可能用的是
不同的username吗?
难道因为编译不了adduser就想继承db类吗?我想你本来根本就不需要做到继承的关系。
(当然严格来说继承也无不可)你只需要在adduser的时候new一个db类,然后填上sql,执行
就行了。
另外一个要提醒的是:adduser根本就不应该是一个类。你应该写的是user类,adduser只不过
是一个方法而已。
希望你在写代码之前好好的学习面向对象的基础知识。否则,前面的路将会非常困难。
 
是我没有说明白,我这两个程序的作用是网上注册程序。
我的思路是这样的:
一共有两个程序:
一个是与数据库建立连接,另一个是对数据库进行操作,譬如:添加用户,删除用户,以及
显示用户列表。
其实这是可以在一个程序里实现的,但我考虑到做网站有很多地方要操作数据库,那么我把
连接数据库的程序单独写到时只要调用就可以了。相当于ASP中的include一下把程序包含进
来。我程序用的username、password是给注册用户用的并不是我连接数据库的username,
password。你这人真热心,如果我们能交朋友就好了。:)
 
但是你的思路确实很乱,先好好补一下面向对象的课程。否则
曹大侠再怎么说也是枉然。
反正我觉得我也没法说得比曹大侠更详细了。
 
小猪:也许是你说得很对吧,你能给我指条明路吗?
 
[red]先好好补一下面向对象的课程,弄清为什么
要用对象,简单的对象组合原理,
以及对象继承后的类层次关系[/red]
就是这样了。
 
我觉得你在这儿用不着使用继承。在这儿生成一个 db类的对象就可以了。
 
我非常感谢曹晓钢。
 
接受答案了.
 
后退
顶部