写了个控制台版的简陋的酒店管理系统 写的比较原始比较差 为了求速度 很多提示和可优化的内容都没写
复习:
- 构造方法:与类同名,无返回值
- This关键词 代表本类
- 方法的重载 同一类中 方法名相同 参数不同:类型 ,个数 ,顺序不同 与返回值和类型名字无关
- 引用类型数组 步骤1.初始化数组长度 2.初始化数组元素
- 二维数组(引用类型数组)
学习内容
1优化了控制台板的酒店管理系统 改用了面向对象的方法
Room类
public class room {
String[][] name = new String[5][5];
String[][] room = new String[5][5];
}
hotel类
import java.util.Scanner;
public class hotel {
room Room;
hotel(){
Room = new room();
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++) {
Room.name[i][j]="null";
Room.room[i][j]=(i+1)+"00"+(j+1);
}
}
public void Show(String order){
if (order.equalsIgnoreCase("show")) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(Room.name[i][j] + " ");
}
System.out.println();
for (int j = 0; j < 5; j++) {
System.out.print(Room.room[i][j] + " ");
}
System.out.println();
}
}else System.out.println("输入错误");
}
public void In(String order, Scanner sc){
if(order.equalsIgnoreCase("in")) {
String r = sc.nextLine();
String n = sc.nextLine();
boolean flag = false;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (Room.room[i][j].equals(r) && Room.name[i][j].equals("null")) {
Room.name[i][j] = n;
flag = true;
}
if (!flag) {
System.out.println("输错房间了亲");
}
}
}
public void Out(String order, Scanner sc){
if(order.equalsIgnoreCase("out")){
String r = sc.nextLine();
boolean flag = false;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if(Room.room[i][j].equals(r) && Room.name[i][j].equals("null")){
System.out.println("不用退房");
flag = true;
}else if(Room.room[i][j].equals(r) && !Room.name[i][j].equals("null")){
Room.name[i][j] = "null";
flag = true;
System.out.println("退房成功了亲");
}
if(!flag) {System.out.println("输错房间了亲");}
}
}
}
测试主方法
import java.util.Scanner;
public class classtest {
public static void main(String[] args) {
hotel Hotel = new hotel();
Scanner sc = new Scanner(System.in);
String order;
order = sc.nextLine();
do{
if(order.equalsIgnoreCase("show")){
Hotel.Show(order);
order = sc.nextLine();
} else if(order.equalsIgnoreCase("in")){
Hotel.In(order,sc);
order = sc.nextLine();
}else if(order.equalsIgnoreCase("out")){
Hotel.Out(order,sc);
order = sc.nextLine();
}else {
System.out.println("输错了亲 请重新输入");
order = sc.nextLine();
}
}while (!order.equals("0"));
System.out.println("退出成功");
}
}
2.二维数组的内存图
3.继承(extends):子类继承父类
1.语法结构: 子类extends父类
2.特征:
a.子类继承父类,就继承父类中所有的成员变量和方法
b.所有类都有默认继承的父类:object
c.子类功能一定比父类更强大 可以定义自己独特的成员变量和方法
d.子类只能有一个父类,父类可以有多个子类
3.特殊情况:子类中成员变量名与父类中的同名时
如 name
Dog d = new Dog()
d.name点出来的一定是子类的
4.创建过程先父后子 创建子类的过程中一定会调用父类无参构造方法
Super this关键词调用的只能放在方法第一行
5.super关键词
Super:父类对象
- 在子类构造方法中一定会先默认调用父类的无参构造分 默认添加super()
- 如果父类没有无参构造方法,要在子类中手动调用父类的有参构造
- 在所有父子类关系的类中,建议先添加无参构造方法,方便子类使用
- 通过子类对象调用方法时,先看子类中有没有重写父类中的方法 如果重写了 显示子类的方法 没有重写就显示父类的
继承出现的前提(为了解决的问题):代码的复用性
面向对象三(四)大特征:继承 封装 多态(抽象)
6方法的重写 前提:必须存在父子类关系
子类重写父类定义的方法,方法的方法名/返回值/修饰符/参数,必须完全一致才能实现方法的重写(目前)
7.抽象方法:abstract
A.使用abstract修饰的方法,抽象方法
B . 抽象方法是没有方法体的
8.抽象类
A.使用abstract修饰的类就是抽象类
B . 一个类中可以存在多个抽象方法
C . 抽象类不能实例化
D.如果子类不重写父类中的抽象类,就不能继承父类,或者将自己也变成抽象类
E.抽象类也有构造方法
9 成员变量不可能抽象,因为都是具体的类型,具体的值
有抽象方法的类就是抽象类 true
抽象了就是有抽象方法的类 false
抽象类中可以存在抽象方法 true