首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类和具体类

类和具体类
EN

Stack Overflow用户
提问于 2017-01-23 20:02:09
回答 3查看 216关注 0票数 1

我想知道这些类之间的区别,在我的应用程序中,我需要设置一些参数并通过方法传递对象。我有一些只使用方法的接口(主要是DAO/Factory方法)。我对我的密码有疑问。

  • 我应该只使用接口和具体类吗?
  • 还是使用类(与Getter和Setter一起使用)并只实现方法?
  • 我应该把它们混合起来吗?这是个糟糕的做法吗?

接口:

代码语言:javascript
复制
public interface Animal {
  void roar();
}

用接口实现方法的混凝土类

代码语言:javascript
复制
public Lion implements Animal {
@overrride
 void roar(){
    //roar like lion!
  }
}

具体类:我有一个用于构造对象以使DAO操作的类。

代码语言:javascript
复制
public class Lion {
  private String lionName;
  getter and setter...
  void roar(){
 //Roar like Lion.
 }
}

摘要:

代码语言:javascript
复制
abstract class Lion {
  abstract public void abstractRoar();
}

提前谢谢,像往常一样,你的帮助真的很感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-23 21:10:54

如果我理解得对,你的问题是:

每次创建类时都需要实现接口吗?

答案是否定的。接口仅用于抽象。如果有几个类共享共同的方法,那么使用一个接口将简化代码。

有关接口的更多信息(我应该何时使用,如何使用),请参阅“有效Java”一书(第19项)。下面是一个链接:

有效的Java项目19

希望能解决你的问题。

票数 1
EN

Stack Overflow用户

发布于 2017-01-23 20:59:24

我有这样的事情:

类用户:

代码语言:javascript
复制
public class Users {

private int userId;
private String userPassword;
private int userProfile;
private String userName;    
private String userPosition;
private int userCencos;
private String userOffice;

public Users(int userId, String userPassword, int userProfile, String userName, String userPosition, int userCencos, String userOffice) {
    Constructor..
}

public String getUserOffice() {
    return userOffice;
}
more getter/setter ...

接口:

代码语言:javascript
复制
public interface UserDAOInterface {

    public int insert(Users user) throws SQLException;
    more DAO Operations...
}

DAO用户:

代码语言:javascript
复制
public class UserDAOConcrete implements UserDAOInterface {

private int result;    
public PreparedStatement query;

@Override
public Users login(int userId, String password) throws NumberFormatException , SQLException{

    SQL sql = new SQL();
    try {            

        PreparedStatement loginQuery = sql.createPStatement(cf.SELECT_USER_BY_LOGIN_DATA);
        loginQuery.setInt(1, userId);
        loginQuery.setString(2, password);
        System.out.println(loginQuery.toString());

        try {
            ResultSet resultSet = loginQuery.executeQuery();
            if (!resultSet.isBeforeFirst()) {
                loginQuery.close();
                sql.dbConection().close();
                throw new NullPointerException("Usuario No encontrado");
            }
            while (resultSet.next()) {
                Users newLoggedUser = new Users();

                newLoggedUser.setUserId(resultSet.getInt("UserId"));
                newLoggedUser.setUserCencos(resultSet.getInt("CostCenter_CostCenterId"));
                newLoggedUser.setUserProfile(resultSet.getInt("Profiles_ProfileId"));                    
                newLoggedUser.setUserName(resultSet.getString("UserName"));
                newLoggedUser.setUserPosition(resultSet.getString("UserPosition"));
                newLoggedUser.setUserOffice(resultSet.getString("UserOffice"));
                resultSet.close();
                loginQuery.close();
                sql.dbConection().close();
                return newLoggedUser;
            }
        } catch (SQLException | NullPointerException | NumberFormatException e) {                
            throw e;
        } finally {
            try {
                loginQuery.close();
                sql.dbConection().close();
            } catch (SQLException e) {
                System.out.println("SQL Error: " + e);
            }
        }
        return null;
    } catch (SQLException ex) {
        System.out.println("SQL Error: " + ex);
    }
    return null;
}    

DAOFactory:

代码语言:javascript
复制
public class UserDAOFactory {

public static UserDAOConcrete getUserDAO(String type) { 
    if (type.equalsIgnoreCase("user")) {
        return new UserDAOConcrete();
    } else {
        return new UserDAOConcrete();
    }
}

呼叫方法:

代码语言:javascript
复制
UserDAOConcrete userDAO = UserDAOFactory.getUserDAO("user");
Users userData = userDAO.login(Integer.parseInt(loginUserId.getText()), String.valueOf(userLoginPassword.getPassword()));    
//Do whatever you need with the Object userData.

如您所见,我有一个与Getter/setter和接口混合的类,工作很好,我应该像这样做所有的代码吗?

票数 0
EN

Stack Overflow用户

发布于 2017-01-23 20:33:16

它们都有不同的用例,您需要从这些用例中决定哪些更适合您的需求。

interface的一般用途是定义一组相关的方法,这些方法可以在多个/多个类之间实现和重用。以动物为例,我认为,我会将Animal作为父类,由类(如LionTigerBear等)进行扩展。这个用例的接口可以类似于Noises。每一种动物都可能有不同的噪音,然而,它们都是制造噪音的。该接口可以有growlroarsniff等。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41814612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档