一、课前分享/*------------------------------------------------------*/
早:
数组
优点:访问速度快
缺点:内存消耗大,插入和增删麻烦,定长
链表结构
公平
中:
前期知识回顾
Cursor
晚:
睡眠监测项目:测心率的传感器,测声音的传感器
二、上课内容/*------------------------------------------------------*/
上午:
多态poly
多态就是一种事物的多种表形式。
条件:类的继承|接口的实现
最终体现:父类引用指向子类对象
对应类型引用调用 :
能调用的成员包含,子类中定义的成员 + 父类中的继承的成员
如果子类中存在重写方法,调用子类中重写后的方法对父类的方法进行屏蔽
多态引用调用 :
调用成员变量 : 编译运行找父类|看左边|看类型
调用成员方法 : 编译看父类|左边|类型,运行找子类|右边|对象
多态引用对子类新增成员不可见,但是如果子类中存在方法重写,会调用重写后的方法
注意 : 如果使用多态但是不配合方法的重写,多态就没有意义
下午:
标准赋值 : 对应类型的数据赋值给对应类型的变量
int i = 1;
Person p = new Person();
基本数据类型的类型转换 :
自动类型提升 : 小-->大
long l = i;
强制类型转换 : 大-->小
int i2 = (int)l;
引用数据类型的转型 :
向上转型 : 小-->大
Person p = new Student();-->多态
向下转型 : 大-->小
Student s = (Student)p;
java.lang.ClassCastException : 类型转换异常
避免类型转换异常的出现 :instanceof 运算符
语法 :
引用 instanceof 类型 判断前面的引用是否是指向后面类型的对象|子类对象,如果是返回true,不是返回false
多态的作用:
减少重复的代码
1)提高了代码的维护性 (通过继承和实现来保证)
2)提高了代码的扩展性 (通过多态来保证)
3)降低代码耦合度
抽象类abstract
当不确定方法体时可以定义为抽象方法,存在抽象方法的类就是抽象类。抽象类不能创建对象,只能通过子类实现所有抽象方法创建对象。
接口interface
接口是一种特殊的抽象类,在项目中起到解耦的作用,提高代码的复用性,一般为抽象功能的集合。接口不能实例化,一个类可以实现多接口,实现类分为两种,一种是抽象实现类,按需实现抽象方法,一种是具体实现类,实现全部抽象方法
三、代码练习/*------------------------------------------------------*/
package youjixian01a.com.treepomelo.basepractice;
import java.util.Scanner;
/***
* 2135
* 贰壹叁伍
* 零零零贰壹叁伍
* 零佰零拾零万贰仟壹佰叁拾伍元
*/
public class MoneyConvert {
public static void main(String[] args) {
//输入一个金额
int money = 0;
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入一个金额:");
int m = sc.nextInt();
if(m>=0){
money = m;
break;
}
else
System.out.println("您输入的金额有误...");
}
//转换成大写
String moneyStr = convert(money);
System.out.println(moneyStr);
//补
String strEx="";
int len = moneyStr.length();
while(len<7){
strEx+="零";
len++;
}
moneyStr = (strEx+=moneyStr);
System.out.println(moneyStr);
//加单位
String[] dw = new String[]{"佰","拾","萬","仟","佰","拾","元"};
for (int i = 0; i < dw.length; i++) {
dw[i]=(moneyStr.charAt(i)+dw[i]);
}
for (String s : dw) {
System.out.print(s);
}
System.out.println();
System.out.println(moneyStr);
}
public static String convert(int i){
String str = "";
String[] arr = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
while(i>10){
int ge = i % 10;
str+=arr[ge];
i/=10;
}
str += arr[i];
return new StringBuffer(str).reverse().toString();
}
}
package youjixian01a.com.treepomelo.basepractice;
import java.util.Objects;
/**
* 对象数组5
* 定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
* 学生的属性:学号,姓名,年龄。
* 要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
* 要求2:添加完毕之后,遍历所有学生信息。
* 要求3:通过id删除学生信息
* 如果存在,则删除,如果不存在,则提示删除失败。
* 要求4:删除完毕之后,遍历所有学生信息。
* 要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁*/
public class ObjectControl {
public static void main(String[] args) {
//定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
Student01 s1 = new Student01("xiaoming", 1, "hubei");
Student01 s2 = new Student01("xiaohong", 2, "xian");
Student01 s3 = new Student01("xiaowang", 3, "anhui");
Student01[] stu = new Student01[]{s1,s2,s3};
//要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
Student01 s4 = new Student01("xiaohuang", 4, "yunnan");
//唯一性判断
if(contains(stu,s4.getId())){
//数组中id存在,输入的数据有误
System.out.println("学生已存在,请重新添加");
}
else{
//数组中id不存在,判断数组是否已满,不满则直接添加,满了数组长度+1再添加
int count = arrCount(stu);
if(count != stu.length){
stu[count] = s4;
}
else{
//数组长度+1
stu = creatNewArr(stu,stu.length+1);
//添加元素
stu[stu.length-1] = s4;
}
}
//要求2:添加完毕之后,遍历所有学生信息。
print(stu);
System.out.println("========================================");
//要求3:通过id删除学生信息
//判断是否有对应的学生
int id = 4;
if(!contains(stu,id)){
//没有,输入有误
System.out.println("没有这个学生,请重新输入...");
}
else{
//有,找出对应学生,将其指向null
deleteStu(stu,id);
}
//要求4:删除完毕之后,遍历所有学生信息。
print(stu);
System.out.println("=====================================");
//要求5:查询数组id为“3”的学生,如果存在,则将他的地址改为"美国"*/
id=1;
for (Student01 s : stu) {
if(s!=null){
if(s.getId()==id){
s.setAddress("美国");
}
}
else{
System.out.println("这个学生不存在,请重新输入...");
}
}
print(stu);
}
private static void deleteStu(Student01[] stu,int id) {
for (int i = 0; i < stu.length; i++) {
if(stu[i]!=null){
if(stu[i].getId()==id){
stu[i]=null;
}
}
}
}
private static void print(Student01[] stu) {
for (int i = 0; i < stu.length; i++) {
System.out.println(stu[i]);
}
}
private static int arrCount(Student01[] stu) {
int count=0;
for (Student01 i : stu) {
if(i!=null)
count++;
}
return count;
}
private static Student01[] creatNewArr(Student01[] stu, int n) {
Student01[] newStu = new Student01[n];
for (int i = 0; i < stu.length; i++) {
newStu[i]=stu[i];
}
return newStu;
}
public static boolean contains(Student01[] stu, int id){
//
for (Student01 s : stu) {
if(s!=null){
if(s.getId()==id)
return true;
}
}
return false;
}
}
class Student01{
private String name;
private int id;
private String address;
public Student01() {
}
public Student01(String name, int id, String address) {
this.name = name;
this.id = id;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student01{" +
"name='" + name + '\'' +
", id=" + id +
", address='" + address + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student01)) return false;
Student01 student01 = (Student01) o;
return id == student01.id && name.equals(student01.name) && address.equals(student01.address);
}
@Override
public int hashCode() {
return Objects.hash(name, id, address);
}
}
package youjixian01a;
import java.util.Scanner;
public class test31 {
public static void main(String[] args) {
//选择
int choice = 0;
while(true){
System.out.println("请选择购买的饮料:1、咖啡 2、矿泉水 3、可乐");
Scanner sc = new Scanner(System.in);
choice = sc.nextInt();
if(choice==1||choice==2||choice==3)break;
else System.out.println("您的输入有误,请重新输入...");
}
Drink drink = new Drink();
if(choice == 1){
drink = new Coffee();
}
else if(choice ==3){
drink = new Cola();
}
drink.set();
drink.show();
}
}
class Drink{
private String name;
private int capacity;
public Drink() {
}
public Drink(String name, int capacity) {
this.name = name;
this.capacity = capacity;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
//输入数据
public void set(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入容量:");
setCapacity(sc.nextInt());
}
//展示信息
public void show(){
System.out.println("您购买的饮料信息如下:\n"+"名称:矿泉水"+"\n容量:"+getCapacity());
}
}
class Coffee extends Drink{
private String ingredient;
public Coffee() {
}
public Coffee(String name, int capacity, String ingredient) {
super(name, capacity);
this.ingredient = ingredient;
}
public String getIngredient() {
return ingredient;
}
public void setIngredient(String ingredient) {
this.ingredient = ingredient;
}
@Override
public void set(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入容量:");
setCapacity(sc.nextInt());
System.out.println("请问是否需要配料:加奶、加糖");
setIngredient(sc.next());
}
@Override
public void show(){
System.out.println("您购买的饮料信息如下:\n"+"名称:"+getName()+"\n配料:"+getIngredient()+"\n容量:"+getCapacity());
}
}
class Cola extends Drink{
private String brand;
public Cola() {
}
public Cola(String name, int capacity, String brand) {
super(name, capacity);
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public void set(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入容量:");
setCapacity(sc.nextInt());
System.out.println("请输入你想要的可乐,1、可口可乐,2、百事可乐:");
setBrand(sc.next());
}
@Override
public void show(){
System.out.println("您购买的饮料信息如下:\n"+"名称:"+getName()+"\n品牌:"+getBrand()+"\n容量:"+getCapacity());
}
}