1. 向上造型:

  • 超类型的引用指向派生类的对象
  • 能点出来什么,看引用的类型-------------这是规定,记住就可以了
     package ooday04;//向上造型的演示public class UploadDemo {public static void main(String[] args) {Aoo o1 = new Aoo();o1.a = 1;o1.show();//o1.b = 2;  //编译错误,超类不能访问派生类的//o1.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(){}}
     Person[] ps = new Person[7];ps[0] = new Student("zhangsan",25,"LF","111"); //向上造型ps[1] = new Student("lisi",24,"JMS","222");ps[2] = new Student("wangwu",26,"SD","333");ps[3] = new Teacher("zhaoliu",36,"SX",20000.0);ps[4] = new Teacher("sunqi",45,"LF",30000.0);ps[5] = new Doctor("qinba",46,"JMS","主任医师");ps[6] = new Doctor("gaojiu",35,"SD","主治医师");for(int i=0;i<ps.length;i++){ //遍历所有人ps[i].sayHi(); //每个人都跟大家问好}

2. 方法的重写(override/overriding):重新写、覆盖

  • 发生在父子类中,方法名相同,参数列表相同
  • 重写方法被调用时,看对象的类型-------这是规定,记住就可以了
     class 餐馆{void 做餐(){ 做中餐 }}//1)我还是想做中餐---------------不需要重写class Aoo extends 餐馆{}//2)我想改做西餐-----------------需要重写class Aoo extends 餐馆{void 做餐(){ 做西餐 }}//3)我想在中餐基础之上加入西餐-----需要重写(先super中餐,再加入西餐)class Aoo extends 餐馆{void 做餐(){super.做餐();做西餐}}
     public class Test {public static void main(String[] args) {//将学生/老师/医生统一装到Person数组中,只需要一个for即可//向上造型的好处----实现了代码复用,后期扩展、维护也相当方便Person[] ps = new Person[7];ps[0] = new Student("zhangsan",25,"LF","111"); //向上造型ps[1] = new Student("lisi",24,"JMS","222");ps[2] = new Student("wangwu",26,"SD","333");ps[3] = new Teacher("zhaoliu",36,"SX",20000.0);ps[4] = new Teacher("sunqi",45,"LF",30000.0);ps[5] = new Doctor("qinba",46,"JMS","主任医师");ps[6] = new Doctor("gaojiu",35,"SD","主治医师");for(int i=0;i<ps.length;i++){ //遍历所有人ps[i].sayHi(); //每个人都跟大家问好}//能点出什么来,和,到底调用的是哪个-----一定要分开看//重写方法被调用时,看对象的类型Student z = new Student("zhangsan",25,"LF","111");Person  p = new Student("zhangsan",25,"LF","111");z.sayHi(); //调用Student类的sayHi()p.sayHi(); //调用Student类的sayHi()}}class Person{String name;int age;String address;Person(String name,int age,String address){this.name = name;this.age = age;this.address = address;}void sayHi(){System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address);}}class Student extends Person{String stuId; //学号Student(String name,int age,String address,String stuId){super(name,age,address);this.stuId = stuId;}void sayHi(){System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address+",学号为"+stuId);}}class Teacher extends Person{double salary; //工资Teacher(String name,int age,String address,double salary){super(name,age,address);this.salary = salary;}void sayHi(){System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address+",工资为"+salary);}}class Doctor extends Person{String level; //职称Doctor(String name,int age,String address,String level){super(name,age,address);this.level = level;}}
  • 重写需要遵循"两同两小一大"原则:-------了解,一般都是一模一样的
  • 两同:
    • 方法名相同
    • 参数列表相同
  • 两小:
    • 派生类方法的返回值类型小于或等于超类方法的

      • 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}

3. 重写与重载的区别:

  • 重写(override/overriding):

    • 发生在父子类中,方法名相同,参数列表相同
  • 重载(overload/overloading):
    • 发生在同一类中,方法名相同,参数列表不同

4. 潜艇游戏第四天:

  1. 将侦察潜艇数组、鱼雷潜艇数组、水雷潜艇数组统一组合成SeaObject数组,并测试
  2. 在6个派生类中重写move()移动,并测试
  3. 画窗口:----------在World类中
    • import  JFrame+JPanel
    • 设计World类继承JPanel-----------这步特别容易忘记
    • main中代码:CV大法

4.1列表展示

4.2Battleship类

package cn.tedu.submarine;import java.util.Objects;/*** 战舰*/
public class Battleship extends SeaObject{/*** 命*/private int life;public Battleship() {super(66,26,270,124,5);this.life = 5;}@Overridepublic void move() {}/*** 发射炸弹的方法*/public void shootBomb(){}}

4.3Bomb类

package cn.tedu.submarine;import java.util.Objects;/*** 炸弹*/
public class Bomb extends SeaObject{public Bomb(int x , int y) {super(9,12,x,y,3);}/*** 炸弹移动的方法*/@Overridepublic void move() {y += speed;}}

4.4Mine类

package cn.tedu.submarine;import java.util.Objects;/*** 水雷*/
public class Mine extends SeaObject{public Mine(int x , int y) {super(11,11,x,y,1);}/*** 水雷移动的方法*/@Overridepublic void move() {y-=speed;}}

4.5MineSubMarine类

package cn.tedu.submarine;import java.util.Objects;
import java.util.Random;/*** 水雷潜艇*/
public class MineSubmarine extends SeaObject{public MineSubmarine() {super(63,19);}@Overridepublic void move() {x+=speed;}}

4.6ObserverSubMarine类

package cn.tedu.submarine;import java.util.Objects;
import java.util.Random;/*** 侦察潜艇*/
public class ObserverSubmarine extends SeaObject{public ObserverSubmarine() {super(63,19);}@Overridepublic void move() {x+=speed;}
}

4.7TorpedoSubmarine类

package cn.tedu.submarine;import java.util.Objects;
import java.util.Random;/*** 鱼类潜艇*/
public class TorpedoSubmarine extends SeaObject{public TorpedoSubmarine() {super(64,20);}/*** 鱼类潜艇移动的方法*/@Overridepublic void move() {x+=speed;}}

4.8SeaObject类

package cn.tedu.submarine;import java.util.Random;/*** 海洋对象*/
public abstract class SeaObject {/*** 宽*/protected int width;/*** 高*/protected int height;/*** x轴*/protected int x;/*** y轴*/protected int y;/*** 速度*/protected int speed;public SeaObject(int width,int height,int x , int y,int speed){this.width = width;this.height = height;this.x = x;this.y = y;this.speed = speed;}public SeaObject(int width,int height){this.width = width;this.height = height;Random rand = new Random();x = -width;y = rand.nextInt(479-height-150+1 ) +150;this.speed = rand.nextInt(3)+1;}/*** 移动的方法*/public abstract void move();
}

4.9World(测试类)

package cn.tedu.submarine;import javax.swing.*;/*** 整个游戏世界*/
public class World extends JPanel {public static void main(String[] args) {JFrame frame = new JFrame();World world = new World();world.setFocusable(true);frame.add(world);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(641+16,479+39);frame.setLocationRelativeTo(null);frame.setVisible(true);/*ObserverSubmarine os = new ObserverSubmarine();System.out.println("原始数据---- x:"+os.x+",y:"+os.y+",speed:"+os.speed);os.move();System.out.println("移动后数据---- x:"+os.x+",y:"+os.y+",speed:"+os.speed);TorpedoSubmarine ts = new TorpedoSubmarine();System.out.println("原始数据---- x:"+ts.x+",y:"+ts.y+",speed:"+ts.speed);ts.move();System.out.println("移动后数据---- x:"+ts.x+",y:"+ts.y+",speed:"+ts.speed);MineSubmarine ms = new MineSubmarine();System.out.println("原始数据---- x:"+ms.x+",y:"+ms.y+",speed:"+ms.speed);ms.move();System.out.println("移动后数据---- x:"+ms.x+",y:"+ms.y+",speed:"+ms.speed);Bomb b = new Bomb(150,300);System.out.println("原始数据---- x:"+b.x+",y:"+b.y+",speed:"+b.speed);b.move();System.out.println("移动后数据---- x:"+b.x+",y:"+b.y+",speed:"+b.speed);Mine m = new Mine(100,120);System.out.println("原始数据---- x:"+m.x+",y:"+m.y+",speed:"+m.speed);m.move();System.out.println("移动后数据---- x:"+m.x+",y:"+m.y+",speed:"+m.speed);//        Battleship s = new Battleship();
//        System.out.println(s.x+","+s.y+","+s.speed);
//        s.move();
//        SeaObject[] subMarines = new SeaObject[5];
//        subMarines[0] = new ObserverSubmarine();
//        subMarines[1] = new MineSubmarine();
//        subMarines[2] = new TorpedoSubmarine();
//        subMarines[3] = new ObserverSubmarine();
//        subMarines[4] = new TorpedoSubmarine();
//
//        for (int i = 0; i < subMarines.length; i++) {//遍历所有的潜艇
//            SeaObject so = subMarines[i];
//            System.out.println(so.x+","+so.y+","+so.speed);
//            subMarines[i].move();
//        }
//
//        ObserverSubmarine[] oses = new ObserverSubmarine[3];
//        oses[0] = new ObserverSubmarine();
//        oses[1] = new ObserverSubmarine();
//        oses[2] = new ObserverSubmarine();
//        for (int i = 0; i < oses.length; i++) {
//            System.out.println(oses[i].x+","+oses[i].y+","+oses[i].speed);//输出每个侦察挺的x和y坐标
//            oses[i].move();
//        }
//        Bomb[] bs = new Bomb[3];
//        bs[0] = new Bomb(100,522);
//        bs[1] = new Bomb(145,243);
//        bs[2] = new Bomb(113,443);
//        for (int i = 0; i < bs.length; i++) {
//            Bomb b = bs[i];
//            System.out.println(b.x+","+b.y+","+b.speed);
//            bs[i].move();
//            //炸弹移动
//            //炸弹打潜艇
//        }
//
//        Mine[] ms = new Mine[2];
//        ms[0] = new Mine(241,22);
//        ms[1] = new Mine(341,112);
//        for (int i = 0; i < ms.length; i++) {
//            Mine m = ms[i];
//            System.out.println(m.x+","+m.y+","+m.speed);
//            ms[i].move();
//        }*/}
}

5. 补充:

继承要符合is(是)的关系

5.1超类的意义:

  • 封装共有的属性和行为------------------代码复用
  • 为所有派生类提供统一的类型---------向上造型(代码复用)

5.2 明日单词:

    1)override:重写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:获取18)status:状态

JSD-2204-面向对象-方法重写-潜艇游戏--Day10相关推荐

  1. Java面向对象学习练习———潜艇游戏(飞机游戏)

    潜艇游戏需求: 所参与的角色: 战舰.深水炸弹.侦察潜艇.鱼雷潜艇.水雷潜艇.水雷 角色间的关系: 战舰发射深水炸弹 深水炸弹可以打潜艇(侦察潜艇.鱼雷潜艇.水雷潜艇),若打中: 潜艇消失.深水炸弹消 ...

  2. 第三次学JAVA再学不好就吃翔(part32)--方法重写

    学习笔记,仅供参考 文章目录 面向对象 方法重写 方法重写的注意事项 面向对象 方法重写 什么是方法重写 重写:子父类出现了一模一样的方法 方法重写的应用: 当子类需要父类的功能,而功能主体子类有自己 ...

  3. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上/下造型,main方法,抽象类,接口,设计模式,异常,内部类

    1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...

  4. 面向对象实战(潜艇大战小游戏)

    潜艇游戏需求: 所参与的角色: 战舰.深水炸弹.侦察潜艇.鱼雷潜艇.水雷潜艇.水雷 角色间的关系: 战舰发射深水炸弹 深水炸弹可以打潜艇(侦察潜艇.鱼雷潜艇.水雷潜艇),若打中: 潜艇消失.深水炸弹消 ...

  5. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上_下造型,main方法,抽象类,接口,设计模式,异常,内部类

    1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...

  6. 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)

    27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...

  7. 20面向对象三特征 之继承 方法重写 super

    继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息.通过extends关键词去指明类与类之间的关系,一个父类可 ...

  8. Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细

    目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...

  9. Java基础【之】面向对象编程(封装、继承(extends、方法重写、super)、多态(动态绑定、重载/重写)、代码实现)

    Java基础[之]面向对象编程(封装.继承.多态.代码实现) 1.封装 2.继承 2.1.extends 2.2.方法重写 2.3.super 3.多态 3.1.对象的多态.方法的多态 3.2.动态绑 ...

最新文章

  1. 笔试算法题(55):快速排序实现之三路划分, 三元中值法和插入排序处理小子文件...
  2. 英国政府开源了其大规模监控软件
  3. 场景创新,推动金融行业数字化转型
  4. python 按从小到大的顺序组合成一个字典_Python实现字典排序、按照list中字典的某个key排序的方法示例...
  5. 收集实用的MySQL使用技巧
  6. Java版大顶堆的实现
  7. python创建二维空列表_python定义二维空数组
  8. phpstorm如何同时打开两个文件夹_iPhone如何同时添加两个不同的面容ID?
  9. 六石管理学:你觉得别人错了,应该怎么办
  10. MongoDB的性能优化
  11. 刷流量php网站源码,在线模拟刷网站PV流量源码
  12. 感性电路电流计算_三相电的电功率的计算公式_200KW三相四线制线路,需要多少A电源空开?...
  13. ECMAScript 面试题目
  14. libapache2-mod-php5 apache,Debian Etch libapache2-mod-php5 with bundled libgd
  15. php小偷cookie,ptcms小说小偷程序 最新EXP漏洞
  16. 2022/1/17 位运算
  17. 关于安卓启动模拟器时出现~~~~have you declared this activity in your AndroidMainfest.xml?问题
  18. Microsoft Office SharePoint Server 2007的文件目录结构
  19. 计算机教师格言座右铭,教师人生格言座右铭
  20. jquery仿凡客诚品图片切换的效果实例代码

热门文章

  1. stylegan2 浅层实现
  2. amd 显卡 linux驱动程序,狂追NV AMD发布新版Linux开源显卡驱动
  3. Windows 10 快速检查修复系统
  4. 游戏计算机概率,不是学霸都不好意思玩游戏了!玩家用高数和概率学计算收益...
  5. cpc按点击计算怎么算_如何计算快递运费、物流运费报价怎么算?
  6. 爱尔眼科四川省区2023“集善扶困(贫)健康行”公益行动圆满收官
  7. 暗影格斗三一直显示没有服务器,暗影格斗31.25.5
  8. 初学爬虫-veer图片下载
  9. 香港贸发局香港玩具展即将于2019新年揭幕
  10. android-魔法泡泡动画分析(附源码)