6月4日笔记
面向对象三大核心特性
- 封装
隐藏类的内部实现细节,仅对外暴露公共接口,保护数据安全,简化调用。 - 继承
子类复用父类的属性和方法,实现代码复用,建立类的层级关系。 - 多态
同一行为在不同对象上有不同表现,分为编译时多态(方法重载)和运行时多态(方法重写),提升代码扩展性。
代码练习
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static ArrayList<User> userList = new ArrayList<>();
static ArrayList<News> newsList = new ArrayList<>();
static User currentUser = null;
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
while (true) {
System.out.println("\n====== 微头条主菜单 ======");
System.out.println("1. 注册");
System.out.println("2. 登录");
System.out.println("3. 查看新闻列表");
System.out.println("4. 发布新闻");
System.out.println("5. 退出");
System.out.print("请选择:");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
register();
break;
case 2:
login();
break;
case 3:
showNewsList();
break;
case 4:
publishNews();
break; // 原代码缺break,补上
case 5:
System.out.println("再见!");
scanner.close();
return;
default:
System.out.println("无效选择!");
}
}
}
static void register() {
System.out.print("用户名:");
String name = scanner.nextLine();
for (User u : userList) {
if (u.getUsername().equals(name)) {
System.out.println("用户名已存在!");
return;
}
}
System.out.print("密码:");
String pwd = scanner.nextLine();
System.out.print("请选择角色 (1.普通用户 2.管理员): ");
int role = scanner.nextInt();
scanner.nextLine();
User user;
if (role == 2) {
user = new Admin(name, pwd);
} else {
user = new User(name, pwd);
}
userList.add(user);
System.out.println("注册成功!");
}
static void login() {
System.out.print("用户名:");
String name = scanner.nextLine();
System.out.print("密码:");
String pwd = scanner.nextLine();
for (User u : userList) {
if (u.getUsername().equals(name) && u.getPassword().equals(pwd)) {
currentUser = u;
System.out.println("登录成功!");
while (true) {
currentUser.showMenu();
System.out.print("请输入您的选择:");
int choice = scanner.nextInt();
scanner.nextLine();
if (choice == 0) {
currentUser = null;
System.out.println("已退出登录\n");
return;
}
switch (choice) {
case 1: publishNews(); break;
case 2: showNewsList(); break;
case 3: showNewsDetail(); break;
case 4:
if (currentUser instanceof Admin) {
deleteNews();
} else {
System.out.println("您没有权限执行此操作!\n");
}
break;
case 5: //管理员5是退出
currentUser = null;
System.out.println("已退出登录\n");
return;
default: System.out.println("无效选择\n");
}
}
}
}
// 循环走完没找到用户,密码错误
System.out.println("用户名或密码错误!\n");
}
// 【已存在】发布新闻
static void publishNews() {
if (currentUser == null) {
System.out.println("请先登录!");
return;
}
System.out.print("标题:");
String title = scanner.nextLine();
System.out.print("内容:");
String content = scanner.nextLine();
newsList.add(new News(title, content));
System.out.println("发布成功!");
}
// 【已存在】查看新闻列表
static void showNewsList() {
System.out.println("\n====== 新闻列表 ======");
for (int i = 0; i < newsList.size(); i++) {
News n = newsList.get(i);
System.out.println((i+1) + ". " + n.getTitle() + " (" + n.getPublishTime() + ")");
}
}
//【新增1】查看新闻详情
static void showNewsDetail(){
if(newsList.isEmpty()){
System.out.println("暂无新闻!");
return;
}
System.out.print("请输入要查看的新闻编号:");
int index = scanner.nextInt()-1;
scanner.nextLine();
if(index >=0 && index<newsList.size()){
News n = newsList.get(index);
System.out.println("标题:"+n.getTitle());
System.out.println("内容:"+n.getContent());
System.out.println("发布时间:"+n.getPublishTime());
}else {
System.out.println("编号不存在!");
}
}
//【新增2】管理员删除新闻
static void deleteNews(){
if(newsList.isEmpty()){
System.out.println("暂无新闻可删除!");
return;
}
showNewsList();
System.out.print("输入要删除的新闻编号:");
int idx = scanner.nextInt()-1;
scanner.nextLine();
if(idx>=0&&idx<newsList.size()){
newsList.remove(idx);
System.out.println("删除成功!");
}else {
System.out.println("编号错误!");
}
}
}
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. 退出登录");
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class News {
private String title;
private String content;
private String publishTime;
public String getContent(){
return content;
}
public News(String title, String content) {
this.title = title;
this.content = content;
this.publishTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
public String getTitle() {
return title;
}
public String getPublishTime() {
return publishTime;
}
}
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. 退出登录");
}
}
浙公网安备 33010602011771号