oo.day05
Shoot射击游戏第一天:
1.创建了6个对象类,并创建World类测试
Shoot射击游戏第二天:
1.给6个对象类添加构造方法,并测试
Shoot射击游戏第三天:
1.设计小敌机、大敌机、小蜜蜂、子弹数组,并测试
2.设计FlyingObject超类,6个对象类分别继承
3.给FlyingObject超类设计两个构造方法,对象类分别调用
Shoot射击游戏第四天:
1.将小敌机数组、大敌机数组、小蜜蜂数组合为FlyingObject数组,并测试
2.在6个对象类中重写超类的step()移动
3.画窗口
Shoot射击游戏第五天:
1.给类中的成员添加访问控制修饰符
2.给6个对象类添加图片属性
回顾:
1.向上造型:
1)超类型的引用指向派生类的对象
2)能点出来什么,看引用的类型
2.方法的重写(Override):
1)发生在父子类中,方法名称相同,参数列表相同,方法体不同
2)重写方法被调用时,看对象的类型
3.重写与重载的区别:
1)重写:
发生在父子类中,方法名称相同,参数列表相同,方法体不同
"运行期",看对象类型来调用方法
2)重载:
发生在一个类中,方法名称相同,参数列表不同,方法体不同
"编译期",看引用/参数类型来绑定方法
笔记:
1.package:
1)作用:避免类的命名冲突
2)包名可以有层次结构,同包中的类不能同名
3)类的全称: 包名.类名
4)建议:包名所有字母都小写
import:
1)同包中的类可以直接访问,
不同包中的类不能直接访问,想访问只能如下方式:
1.1)先import声明类再使用类----建议
1.2)类的全称---------太繁琐,不建议
2.访问控制修饰符:
1)public:公开的,任何类
2)private:私有的,本类
3)protected:受保护的,本类、派生类、同包类
4)默认的:什么也不写,本类、同包类
说明:
1)类的访问修饰只能是public或默认的
2)类中成员的访问修饰如上4种都可以
3.final:最终的、不可改变的-----单独应用率低
1)修饰变量:变量不能被改变
2)修饰方法:方法不能被重写
3)修饰类:类不能被继承
4.static:静态的
1)静态变量:
1.1)由static修饰
1.2)属于类,存储在方法区中,只有一份
1.3)常常通过类名点来访问
1.4)何时用:所有对象所共享的数据(图片、音频、视频等)
2)静态方法:
2.1)由static修饰
2.2)属于类,存储在方法区中,只有一份
2.3)常常通过类名点来访问
2.4)静态方法没有隐式的this传递,
静态方法中不能直接访问实例成员
2.5)何时用:方法的操作仅与参数相关而与对象无关
3)静态块:
3.1)属于类,在类被加载期间自动执行,
因类只被加载一次,所以静态块只执行一次
3.2)何时用:加载/初始化静态资源(图片、音频、视频)
练习:
1.保证程序的正常运行
2.以Airplane为例,体会images为静态的和实例的的区别
3.预习static final常量
4.将今天的项目代码在昨天基础之上重写两次
周二----------画对象(不动)
周三----------对象动起来
周四----------对象动起来
周五----------子弹与敌人打
下周一--------英雄机与敌人撞
读图片-------文件的读写(IO)
文件的IO操作,特别容易出现异常
-----所以java强制,做文件处理时,必须加异常处理
background.png
图片-------int,int[]
-------BufferedImage
每个对象都有图片,都有的话,按理说应该放在超类中
------此处放在超类中不合适
------因为每个对象的图片都是不一样的---在派生类中
画窗口
给对象准备图片
画对象-------------
Arrays.sort(arr);
假设sort()不是静态的:
无论a1,a2,a3,...,a100中的哪一个对象
----去sort()时,最终的结果都是一样的
----说明sort()操作仅与参数相关而与对象无关
Arrays a1 = new Arrays();
a1.sort(arr);
Arrays a2 = new Arrays();
a2.sort(arr);
Arrays a3 = new Arrays();
a3.sort(arr);
double d = Math.sqrt(25);
假设sqrt()不是静态的:
无论m1,m2,m3,...,m100中的哪一个对象
----去sqrt(25),最终的结果都是一样的
----说明sqrt()的操作仅与参数有关而与对象无关
Math m1 = new Math();
double d = m1.sqrt(25); //5.0
Math m2 = new Math();
double d = m2.sqrt(25); //5.0
Math m3 = new Math();
double d = m3.sqrt(25); //5.0
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
double b = scan.nextDouble();----------实例方法
double c = Math.random();
double d = Math.sqrt(25);
int[] b = Arrays.copyOf(arr,6);
Arrays.sort(arr);----------------------静态方法
实例变量多还是静态变量多----------实例变量多
实例方法多还是静态方法多----------实例方法多
所有小敌机-------------------airplane.png(一份)
百度音乐听大王叫我来巡山-----xun.mp3(一份)
爱奇艺吸血鬼日记第8季第1集---xi.avi(一份)
100个敌机------小敌机
堆:new出来的对象(包括实例变量)
栈:局部变量(包括方法的参数)
方法区:.class字节码文件(包括方法、静态变量)
成员变量:
1)实例变量:没有static修饰的,属于对象,堆中,
有几个对象就有几份
通过对象名点来访问
2)静态变量:由static修饰的,属于类,方法区中,
只有一份,
通过类名点来访问
class Aoo{
int a;
static int b;
}
不建议默认修饰
变量private,超类的变量protected
方法public
数据(变量)私有化(private)
行为(方法)公开化(public)
class Card{
private String cardId;
private String cardPwd;
private double balance;
public boolean payMoney(double money){
if(balance>=money){
balance-=money;
return true;
}else{
return false;
}
}
public boolean checkPwd(String pwd){
if(cardPwd.equals(pwd)){
return true;
}else{
return false;
}
}
}
package java.util;
class Scanner{
Scanner(Stream s){
}
int nextInt(){
}
double nextDouble(){
}
String next(){
}
}
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
double b = scan.nextDouble();
String s = scan.next();
民生银行
A公司:
package com.a.b.c.d;
class Aoo{
}
B公司:
package com.m.b.c.d;
class Aoo{
}
建议:--------------了解
域名反写 . 项目名称 . 模块名称 . 类名
cn.tedu . aproject . stumanager .
cn.tedu . aproject . teachmanager .
cn.tedu . bproject .
com.taobao
com.baidu
package a.b.c.d.e;
class Aoo{ //a.Aoo
}
package b.m.q.n.y;
class Aoo{ //b.Aoo
}
项目---------小区
包-----------楼+单元
类-----------房子