面向对象第四天:
潜艇游戏第一天:
- 设计了6个类,创建World类并测试
潜艇游戏第二天:
- 给6个类添加构造方法,并测试
潜艇游戏第三天:
- 设计侦察潜艇数组、鱼雷潜艇数组、水雷潜艇数组、水雷数组、炸弹数组,并测试
- 设计SeaObject超类,设计6个类继承超类
- 在超类中设计两个构造方法,6个类分别调用
潜艇游戏第四天:
- 将侦察潜艇数组、鱼雷潜艇数组、水雷潜艇数组统一组合为SeaObject数组,并测试
- 在6个派生类中重写move()移动,并测试(单元测试)
- 画窗口:在World类中,3步--------不要求掌握
- imoprt JFrame+JPanel
- 设计World类继承JPanel-------------这步特别容易忘记
- main中那8句话------CV大法
回顾:
-
引用类型数组:
-
给元素赋值需要new个对象
-
访问需要通过数组元素去打点
Student[] stus = new Student[3]; stus[0] = new Student("zhangsan",25,"LF"); System.out.println(stus[0].name);
-
-
继承:
代码复用,通过extends来实现继承,超类:共有的 派生类:特有的
派生类可以访问:派生类的+超类的 超类不能访问派生类的
单一继承,传递性
规定:构造派生类之前必须先构造超类
派生类构造中若不调用超类构造,则默认super()调超类无参构造
派生类构造中若自己调用了超类构造,则不再默认提供
-
super:指当当前对象的超类对象
super.成员变量名---------------------------访问超类的成员变量
super.方法名()--------------------------------调用超类的方法
super()------------------------------------------调用超类的构造方法
笔记:
-
向上造型:
- 超类型的引用指向派生类的对象
- 能点出来什么,看引用的类型-----------这是规定,记住就行了
public class UploadDemo { public static void main(String[] args) { Aoo o1 = new Aoo(); o1.a = 1; o1.show(); //o1.b = 2; //编译错误,超类不能访问派生类的 //o2.test(); //编译错误 Boo o2 = new Boo(); o2.b = 1; o2.test(); o2.a = 2; //正确,派生类可以访问超类的 o2.show(); //正确 Aoo o3 = new Boo(); //向上造型 o3.a = 1; o3.show(); //o3.b = 2; //编译错误,能点出来什么,看引用的类型 //o3.test(); //编译错误 } } class Aoo{ int a; void show(){ } } class Boo extends Aoo{ int b; void test(){ } }
-
方法的重写(override/overriding):重新写
- 发生在父子类中,方法名相同,参数列表相同------派生类中重写了超类的方法
- 重写方法被调用时,看对象的类型--------这是规定,记住就行了
class 餐馆{ void 做餐(){ 做中餐 } //思考+下课------------3:10继续 } //1)我还是想做中餐-------------不需要重写 class Aoo extends 餐馆{ } //2)我想改做西餐---------------需要重写 class Aoo extends 餐馆{ void 做餐(){ 做西餐 } } //3)我想在中餐之上加入西餐-------需要重写(先super中餐,再加入西餐) class Aoo extends 餐馆{ void 做餐(){ super.做餐(); + 做西餐 } }
-
重写需遵循"两同两小一大"原则:-----------一般都是一模一样的,了解即可
- 两同:
- 方法名相同
- 参数列表相同
- 两小:
- 派生类方法的返回值类型小于或等于超类方法的
- void和基本类型时,必须相等
- 引用类型时,可以小于或等于
- 派生类方法抛出的异常小于或等于超类方法的------------API时再说
- 派生类方法的返回值类型小于或等于超类方法的
- 一大:
- 派生类方法的访问权限大于或等于超类方法的-------------明天上午讲
//超类大,派生类小 class Coo{ void show(){} double test(){ return 0.0; } Student say(){ return null; } Person sayHi(){ return null; } } class Doo extends Coo{ //int show(){ return 1; } //编译错误,void时必须相等 //int test(){ return 0; } //编译错误,基本类型时必须相等 //Person say(){ return null; } //编译错误,引用类型时必须小于或等于 Student sayHi(){ return null; } //正确,Student小于Person }
- 两同:
-
重写与重载的区别:-------------常见面试题
- 重写(override):发生在父子类中,方法名相同,参数列表相同
- 重载(overload):发生在同一类中,方法名相同,参数列表不同
精华笔记:
- 向上造型:
- 超类型的引用指向派生类的对象
- 能点出来什么,看引用的类型-----------这是规定,记住就行了
- 方法的重写(override/overriding):重新写
- 发生在父子类中,方法名相同,参数列表相同------派生类中重写了超类的方法
- 重写方法被调用时,看对象的类型----------------------这是规定,记住就行了
- 重写需遵循"两同两小一大"原则:-----------一般都是一模一样的,了解即可
- 两同:
- 方法名相同
- 参数列表相同
- 两小:
- 派生类方法的返回值类型小于或等于超类方法的
- void和基本类型时,必须相等
- 引用类型时,可以小于或等于
- 派生类方法抛出的异常小于或等于超类方法的------------API时再说
- 派生类方法的返回值类型小于或等于超类方法的
- 一大:
- 派生类方法的访问权限大于或等于超类方法的-------------明天上午讲
- 两同:
- 重写与重载的区别:-------------常见面试题
- 重写(override):发生在父子类中,方法名相同,参数列表相同
- 重载(overload):发生在同一类中,方法名相同,参数列表不同
补充:
-
继承要符合is(是)的关系
-
何时向上造型:
-
当多种角色所干的事几乎一样时,可以将它们统一造型到一个数组中,复用
eg: 学生/老师/医生都在输出名字并问好,就将它们统一造型到Person数组中,一个for
即可,实现代码的复用
eg:所有潜艇能干的事几乎都一样,所以将三种潜艇统一造型到SeaObject数组中
-
-
明日单词:
1)status:状态 2)package:包 3)import:导入 4)public:公开的 5)protected:受保护的 6)private:私有的 7)card:卡 8)id:号码 9)password/pwd:密码 10)balance:余额 11)pay:支付 12)money:金额 13)check:检查 14)static:静态的 15)image:图片 16)icon:图标 17)get:获取