64笔记

一、今日课堂核心知识点

  1. 继承
    使用extends实现类继承,Admin extends User,子类自动复用父类username、password属性与普通方法,通过super()调用父类构造方法,减少重复代码。
  2. 方法重写 @Override
    子类重写父类同名方法,@Override注解标记:
    重写showMenu():普通用户、管理员展示不同功能菜单;
    重写getRoleName():普通用户返回普通用户、管理员返回管理员,是本次作业区分登录提示的核心。
  3. 多态
    父类引用指向子类对象:User user = new Admin(),编译看父类、运行看实际子类类型,自动执行子类重写方法。
    依托多态实现:同一个currentUser.getRoleName(),不同角色自动返回对应角色名称,不用硬编码判断用户名。
  4. 向下转型 & instanceof
    instanceof关键字判断对象真实类型,只有Admin管理员类型,才能执行删除新闻功能,实现权限管控。
    二、微头条项目代码分层改造
    项目拆分为四个独立 Java 文件:User.java(父类)、Admin.java(子类)、News.java(新闻实体)、Main.java(主控程序)
    1.User.java(父类・普通用户模板)
    私有成员:username、password;
    双参构造方法,供子类super调用;
    普通用户专属showMenu()菜单:发布新闻、查看列表、查看详情、退出登录;
    getRoleName()默认返回:普通用户;
    提供用户名、密码 getter 取值方法。
public class User {
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {return username;}
    public String getPassword() {return password;}

    //普通用户菜单
    public void showMenu() {
        System.out.println("\n===== 普通用户菜单 =====");
        System.out.println("1.发布新闻");
        System.out.println("2.查看新闻列表");
        System.out.println("3.查看新闻详情");
        System.out.println("4.退出登录");
    }
    //获取角色名称(子类重写)
    public String getRoleName(){
        return "普通用户";
    }
}

2.Admin.java(子类・管理员,继承 User)
继承父类User,构造用super传参;
重写showMenu():菜单新增4. 删除任意新闻;
重写getRoleName(),固定返回管理员,实现多态区分登录文案。

public class Admin extends User {
    public Admin(String username, String password) {
        super(username, password);
    }
    @Override
    public void showMenu() {
        System.out.println("\n===== 管理员菜单 =====");
        System.out.println("1.发布新闻");
        System.out.println("2.查看新闻列表");
        System.out.println("3.查看新闻详情");
        System.out.println("4.删除任意新闻");
        System.out.println("5.退出登录");
    }
    @Override
    public String getRoleName() {
        return "管理员";
    }
}

3.News.java(新闻实体)
新增author(作者)属性,发布新闻时自动绑定当前登录用户;构造自动生成系统发布时间,提供全部字段 getter。

import java.text.SimpleDateFormat;
import java.util.Date;
public class News {
    private String title;
    private String content;
    private String publishTime;
    private String author;

    public News(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
        this.publishTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }
    //getter省略
    public String getTitle(){return title;}
    public String getContent(){return content;}
    public String getAuthor(){return author;}
    public String getPublishTime(){return publishTime;}
}

4.Main.java(主控程序,多处关键改造)
① 集合采用多态写法

static List<User> userList = new ArrayList<>();
static List<News> newsList = new ArrayList<>();

② 程序内置默认管理员账号

userList.add(new Admin("admin","123456"));

③ 注册功能新增角色选择
输入 1→创建new User(用户名,密码)普通用户;输入 2→创建new Admin(用户名,密码)管理员。

System.out.print("请选择角色(1.普通用户 2.管理员):");
int role = scanner.nextInt();
scanner.nextLine();
if(role==1){
    userList.add(new User(name,pwd));
}else{
    userList.add(new Admin(name,pwd));
}

④ 登录逻辑(作业核心修改点)
登录成功不再固定输出文字,依靠多态currentUser.getRoleName()动态拼接,自动输出:普通用户登录成功!/管理员登录成功!;
登录成功开启子菜单循环:currentUser.showMenu()多态调用菜单;
菜单选项 4 删除新闻:instanceof校验,仅 Admin 可执行deleteNews()。

//登录成功核心代码(题目要求改动位置)
currentUser = u;
//多态动态获取角色名称,自动区分登录提示
System.out.println(currentUser.getRoleName() + "登录成功!");
⑤ 新增功能方法
publishNews():发布新闻,自动把当前登录用户名存入新闻作者;
showNewsList():遍历展示全部新闻标题;
showNewsDetail():输入编号查看新闻完整内容、作者、发布时间;
deleteNews():管理员专属,根据编号删除新闻。

三、关键多态考点汇总(第二题作业截图位置)

屏幕截图 2026-06-04 111125

四、程序运行实测效果
管理员登录:账号admin、密码123456,控制台输出管理员登录成功!,菜单多出删除新闻选项,可执行删新闻;
新注册普通用户:注册选角色 1,登录输出普通用户登录成功!,菜单无删除,选择 4 提示无权限;
任意用户发布新闻,查看详情能看到发布人姓名;管理员可删除任意已发布新闻。
五、当日实训总结
今天从单一类编程进阶到继承 + 多态面向对象设计,收获三点:
继承简化重复代码,父类封装通用属性,子类拓展独有功能;
方法重写 + 多态,实现 “同一个调用,不同实现”,本次登录文案不用 if 判断用户名,依靠getRoleName()自动适配,代码扩展性更强;
instanceof向下转型做权限控制,精准限制管理员独有操作。
相比之前面向过程写法,分层分角色后代码结构清晰,后续新增用户类型只需要新建子类重写对应方法即可。

posted @ 2026-06-04 11:52  chenyujia  阅读(4)  评论(0)    收藏  举报