一、多态
1,多态的概述及其代码的体现
概述:事物的多种状态
前提:
要有继承关系
要有方法重写
要有父类引用子类对象
代码演示:
Animal a=new cat();
a.eat();
多态中的成员访问特点
多态中的成员变量:
编译看左边,运行看左边;
多态中的成员方法:
编译看左边,运行看右边
静态方法
编译看左边,运行看左边
(静态和类相关,算不上重写,所以访问范左边)
多态无法调用子类特有行为
arr【i】 =arr[i].replaceAll(" 空",“满”);
将字符串中指定内容替换成目标内容
String str=“1010满”;
system.out.println(str.contains("满"));
判断字符串元素。
多态的好处和弊端(父类引用子类对象)
好处:
1.提高了代码的维护性(继承保证)
2.提高了代码的扩展性(多态保证)
弊端:
不能使用子类特有的属性和行为
二、抽象类概述和特点
概述:看不懂的
特点:
抽象类和抽象方法都必须使用关键字abstract来修饰
abstract class 类名{}
public abstract void show(){}
抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
抽象类不能实例化,如果抽象类需要生成对象,那么要有子类协助实例化(父类引用子类对象)(子类必须是一个非抽象类)
抽象类的子类
要么是抽象类(意义不大)
要么是非抽象类:需要重写抽象类中所有的抽象类
抽象类的成员特点
成员变量:可以是变量也可以是常量 abstract无法修饰
成员方法:可以有成员方法
构造方法:可以有构造方法,用于子类访问父类数据的初始化
静态方法:有静态方法
抽象方法:可以有抽象方法,也可以不写抽象方法
3、接口的概述及其特点
概述:
1.广义:对外提供规则的就是接口
2.狭义:指java中interface就是接口
特点:
1.接口用关键字interface表示
interface 接口名{}
2.子类实现接口implements表示
class 类名 implements 接口名{};
3.接口不能实例化
按照多态的方式(父类引用子类对象)来实例化
接口的子类
可以是抽象类(意义不大)
可以是具体类,重写接口中所有的抽象方法(推荐方案)
静态类只能用接口调用。
接口成员的特点
成员变量:只能是常量,而且是静态的公开的(位置不固定)
public static final int a=10;
构造方法:接口中没有构造方法
成员方法:只能是抽象方法
默认修饰类 public abstract
(建议手动给出)
实例练习
数组,面向对象封装,继承,多态,接口
请对int [] arr={1,3,5}进行增删改查四大功能,
每个功能分别用一种方法实现。通过用户调用。对数组进行功能实现。
增:得到的是{1,2,3,4,5}
删:得到的是{1}
改:得到的是把{1改成10}
查:获得数组里面的所有数据。
package com.demo1.cn;
public interface Demo {
int[] show(int[] arr);
}
import java.util.Arrays;
public class Demo1 implements Demo {
public int [] show(int []arr) {
int[]arr1=new int[5];
System.arraycopy(arr, 0, arr1, 0, arr.length);
arr1[3]=2;
arr1[4]=4;
Arrays.sort(arr1);
return arr1;
}
}
package com.demo1.cn;
import java.util.Arrays;
public class Demo2 implements Demo{
@Override
public int[] show(int[] arr) {
// TODO Auto-generated method stub
int arr1[]=new int[1];
arr1[0]=arr[0];
return arr1;
}
}
package com.demo1.cn;
public class Demo3 implements Demo {
@Override
public int[] show(int[] arr) {
// TODO Auto-generated method stub
arr[0]=10;
return arr;
}
}
package com.demo1.cn;
import java.util.Arrays;
public class Demo4 implements Demo{
@Override
public int[] show(int[] arr) {
// TODO Auto-generated method stub
System.out.println(Arrays.toString(arr));
return null;
}
}
package com.demo1.cn;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]= {1,3,5};
Demo1 d1=new Demo1();
int []arr2=d1.show(arr);
System.out.println(Arrays.toString(arr2));
Demo2 d2=new Demo2();
int []arr3=d2.show(arr2);
System.out.println(Arrays.toString(arr3));
Demo3 d3=new Demo3();
int []arr4=d3.show(arr3);
System.out.println(Arrays.toString(arr4));
Demo4 d4=new Demo4();
d4.show(arr2);
}
}
练习二:简易酒店管理系统
package com.demo.cn;
import java.util.Arrays;
import java.util.Scanner;
public class test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[][] hotel=createHotel();
// for (int i = 0; i < hotel.length; i++) {
// System.out.println(Arrays.toString(hotel[i]));
// }
sayHello();
//为客户提供服务
service(hotel);
}
private static void service(String[][] hotel) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
while(true){
System.out.println("请输入你想执行的功能!");
String command= scanner.nextLine();
if("select".equals(command)){
select(hotel);
}else if("in".equals(command)) {
in(hotel);
}else if("out".equals(command)) {
out(hotel);
}else if("change".equals(command)) {
change(hotel);
}else if("exit".equals(command)) {
System.out.println("滚球吧,叼毛");
return;
}else {
System.out.println("输入错误!");
}
}
}
private static void change(String[][] hotel) {
// TODO Auto-generated method stub
Scanner scanner =new Scanner(System.in);
System.out.println("请输入之前的房间");
int beforHN=scanner.nextInt();
int beforLC=beforHN/100-1;
int beforFJ=beforHN%100-1;
if(beforHN<0||beforLC>9||beforFJ>9) {
System.out.println("房间号码错误");
}else {
String beforMess=hotel[beforLC][beforFJ];
if(beforMess.contains("满")) {
System.out.println("请问你想换的房间");
int afterHN=scanner.nextInt();
int afterLC=afterHN/100-1;
int afterFJ=afterHN%100-1;
if(afterHN<0||afterLC>9||afterFJ>9) {
System.out.println("房间号码错误");
}else {
String afterMess=hotel[afterLC][afterFJ];
if(afterMess.contains("空")) {
hotel[beforLC][beforFJ]=hotel[beforLC][beforFJ].replaceAll("满", "空");
hotel[afterLC][afterFJ]=hotel[afterLC][afterFJ].replaceAll("空", "满");
System.out.println("换房成功");
}else{
System.out.println("该房间以有人");
}
}
}else {
System.out.println("该房间没有被入驻");
}
}
}
private static void out(String[][] hotel) {
// TODO Auto-generated method stub
System.out.println("请输入你想要退的房间号");
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
int LC=a/100-1;
int FJ=a%100-1;
if(a<0||LC>hotel.length-1||FJ>hotel[LC].length-1) {
System.out.println("房间号错误!");
}else {
if(hotel[LC][FJ].contains("满")) {
hotel[LC][FJ]=hotel[LC][FJ].replaceAll("满", "空");
System.out.println("退房成功");
}else {
System.out.println("该房间没有被入驻");
}
}
}
private static void in(String[][] hotel) {
// TODO Auto-generated method stub
System.out.println("请输入你想入住的房间号");
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
int LC=a/100-1;
int FJ=a%100-1;
if(a<0||LC>hotel.length-1||FJ>hotel[LC].length-1) {
System.out.println("无该房间");
return;
}else {
if(hotel[LC][FJ].contains("空")) {
//将字符串中指定内容替换成目标内容
hotel[LC][FJ]=hotel[LC][FJ].replaceAll("空", "满");
System.out.println("办理成功");
}else{
System.out.println("房间已满");
}
}
}
private static void select(String[][] hotel) {
// TODO Auto-generated method stub
for (int i = 0; i < hotel.length; i++) {
System.out.println(Arrays.toString(hotel[i]));
}
}
private static void sayHello() {
// TODO Auto-generated method stub
System.out.println("***欢迎来到大酒店***");
System.out.println("请输入对应的指令");
System.out.println("select————————>查看所以房间信息");
System.out.println("in———————————>办理入住");
System.out.println("out——————————>办理退房");
System.out.println("change———————>办理换房");
System.out.println("exit—————————>退出系统");
}
private static String[][] createHotel() {
// TODO Auto-generated method stub
String arr[][]=new String[10][10];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j]=(i+1)*100+(j+1)+"空 ";
}
}
return arr;
}
}
结果: