人人黑眼圈 2024-04-02 14:59 采纳率: 0%
浏览 3

类中的属性如何获取不同的子类对象?

@Getter
@Setter
class UserBase {
    String name;
    List<? extends AliasBase> aliasName;
}

@Getter
@Setter
class AliasBase {
    String alise1;
}


@Getter
@Setter
class UserSub extends UserBase {
    Integer id;
}

@Getter
@Setter
class AliasSub extends AliasBase {
    String alise2;
}

UserSub、AliasSub 出现的原因是为了扩展UserBase、AliasBase。之后操作实体类的话都操作UserSub和AliasSub。
如果我想要获取UserSub数据的时候内部List获取的是AliasSub而不是AliasBase,我该怎么处理?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-02 14:59
    关注

    引自免费微信小程序:皆我百晓生

    在Java中,我们可以通过继承和接口来创建多态。首先,我们需要定义一个基类(UserBase),然后在子类中实现相应的功能。对于UserBase,我们可以通过其@Getter@ Setter注解来添加getter和setter方法,以便在对象中访问这些字段。为了获取子类对象的不同子类,我们可以将UserBase和子类合并为一个抽象类(User)。在这个抽象类中,我们将定义一个新的方法getUserNames(),这个方法将在所有继承它的类中被调用。

    下面是一个简单的示例:

    public abstract class User {
        private String name;
    
        public User(String name) {
            this.name = name;
        }
    
        @Override
        public String getName() {
            return name;
        }
    }
    
    public class UserSub extends User {
        private int id;
    
        public UserSub(int id) {
            super(id);
        }
    
        @Override
        public String getName() {
            return "UserSub";
        }
    }
    
    public class_aliasBase extends UserBase {
        private String alias1;
    
        public void setAliases(String aliases) {
            this.alises1 = aliases;
        }
    
        @Override
        public String getName() {
            return "UserBase Aliases";
        }
    }
    
    public class aliasSub extends UserBase {
        private String alias2;
    
        public void setAliases(String aliases) {
            this.alises2 = aliases;
        }
    
        @Override
        public String getName() {
            return "UserBase Aliases Sub";
        }
    }
    
    public class main {
        public static void main(String[] args) {
            User user1 = new User("John");
            System.out.println(user1.getName()); // 输出: John
    
            User user2 = new User("Jane");
            System.out.println(user2.getName()); // 输出: Jane
    
            User sub1 = new UserSub(1);
            System.out.println(sub1.getName()); // 输出: UserSub 1
    
            User sub2 = new UserSub(2);
            System.out.println(sub2.getName()); // 输出: UserSub 2
    
            User alias1 = new UserAliasBase();
            alias1.setAliases("sub");
    
            User alias2 = new UserAliasBase();
            alias2.setAliases("subSub");
    
            System.out.println(alias1.getName()); // 输出: UserBase Aliases Sub
            System.out.println(alias2.getName()); // 输出: UserBase Aliases Sub Sub
        }
    }
    

    以上代码中,UserBase被表示为一个抽象类,并且包含了getName()方法用于获取对象的名称。在UserSub和aliasSub类中,我们都重写了这个方法以得到不同类型的名称。在main方法中,我们创建了三个用户对象,分别继承自UserBase、UserSub和UserAliasBase,然后调用了各自的getName()方法并输出结果。可以看到,用户2和user3的名称分别为"UserSub 2"和"UserSub 3"。这就是我们在Java中实现多态的方法。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月2日