【问题标题】:How do I access the variables of a subclass in java?如何在java中访问子类的变量?
【发布时间】:2021-03-18 06:14:35
【问题描述】:

在我的程序中,我有一个 User 类和两个子类 Customer 和 Seller。在程序开始时,我跟踪当前通过 authUser 变量登录的用户(客户或卖方)。我遇到的问题是,在一个单独的方法中,我必须访问 authUser 中特定于 Customer 类且不存在于 User 类中的变量。我将如何访问它,因为如果我尝试获取变量,它会显示错误,因为技术上 authUser 被声明为 User 类型而不是 Customer 类型。我已经尝试检查 authUser 的实例,看看他们是客户还是卖家,并相应地转换变量,但没有奏效。

编辑:我的错,我没有意识到它是多么模糊。代码设置如下

我的问题是无法识别 authUser.variableINeed,因为 variableINeed 不是 User 类的一部分,即使 authUser 可能包含 Customer 对象。

    public class User {
        String user;
        String pass;
    }
    
    public class Customer extends User{
        LinkedList<> variableINeed;
    }
    
    public class Seller extends User{
        //other irrelevant info
    }

    public class Implementation(){
        public static void main(String[] args){
            //calls a login() function which initializes authUser to either a Customer or Seller object based on who logs in
            //method that needs authUser.variableINeed
        }
        User authUser;
    }

【问题讨论】:

  • 分享你的尝试
  • 另外 - “那不起作用”不是很丰富。究竟是什么问题?
  • 是的,请将您的代码以及任何错误消息的确切文本添加到您的问题中。
  • 您需要发布minimal reproducible example。显示类的简化版本以及您想要访问的内容。确保示例编译没有错误。在代码中使用 cmets 来解释你想要做什么。
  • 为什么不在 User 类中包含List needs?或者更确切地说是一种方法getNeeds()?这可能只为用户返回 null,但对于客户可以返回真实列表?让多态性为你工作,而不是试图与之抗争。

标签: java oop abstract-class


【解决方案1】:

如果我正确理解了您的问题,那么您必须将 User 对象转换为 Customer

User authUser = /* ... */;

// in your method:
// Check if the logged-in user is a customer
if (authUser instanceof Customer) {
  // Cast the authUser object to a Customer
  Customer customer = (Customer) authUser;
  // Now you can access the attributes of the `Customer` class from the customer object
  System.out.println(customer.customerAttribute);
}

【讨论】:

  • 我会这样做,但我想保留对原始对象的引用。投射它仍然会保持参考吗?
【解决方案2】:

如果没有 sn-ps,很难理解你在说什么。您说 authUser 特定于 Customer 类并且不存在于 User 类中,但 authUser 也被声明为用户类型。 我假设它们都在,但你想访问父类的 sn-p。 您可以使用 super 关键字来引用它。 参考:https://docs.oracle.com/javase/tutorial/java/IandI/super.html

【讨论】:

  • 反过来。 User 是父类,正如你所说的 authUser 被声明为用户类型,但它被设置为等于 Customer 对象。我想访问特定于 Customer 子类的变量。
猜你喜欢
  • 2018-08-15
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多