重写(Override):

定义:子类可以通过重写来解决父类中不适用的方法!重写一定是发生在父子的关系中!

重写的条件:

1.子类如果要重写父类不适用的方法,首先方法的定义要跟父类保持一致。方法体中的内容根据自己的逻辑来实现。重写不是必要的,具体看需求!
2.若子类重写了父类的方法,在运行之前调用的方法是父类的,但是运行之后执行的则是子类重写后的方法。 现象:调用父执行子!
3.遵循两同两小一大原则:
两同:方法名要相同,参数列表要相同。
两小:子类重写父类方法时,返回值类型要等于或者小于父类中的那个方法。
子类重写父类方法时,抛的异常要等于或小于父类中的那个方法(第二阶段会讲异常)
一大:子类重写父类方法时的访问权限要等于或大于父类中的那个方法(后续会讲)

测试类子类重写:

Student类重写
      @Override
    void sayHi() {
        System.out.println("大家好,我叫" + this.name + ",今年已经" + this.age + "岁了!我的性别:"+this.sex+"我的学号是:"+stuId );
    }
Teacher类重写
     @Override
    void sayHi() {//重写父类中的sayHi方法
        System.out.println("大家好,我叫" + this.name + ",今年已经" + this.age + "岁了!我的性别:"+this.sex+"我的工资是:"+salary );
    }
Doctor类重写
      @Override
    void sayHi() {
        System.out.println("大家好,我叫" + this.name + ",今年已经" + this.age + "岁了!我的性别:"+this.sex+"我的职称是:"+ level );
    }
修改项目中所有的子类 重写 父类的step方法
@Override
    void step() {
        System.out.println("战舰通过键盘左右运动...");
    }



@Override
    void step() {
        System.out.println("深水炸弹y向下运动....");
    }


@Override
    void step() {
        System.out.println("水雷y向上运动....");
    }



@Override
    void step() {
        System.out.println("水雷潜艇x向右运动....");
    }


@Override
    void step() {
        System.out.println("侦察潜艇x向右运动....");
    }



@Override
    void step() {
        System.out.println("鱼雷y向上运动....");
    }

@Override
    void step() {
        System.out.println("鱼雷潜艇x向右运动....");
    }

重写强化:

重写的情况分类:
情况一:Boo子类 只想吃西餐 -----------不需要重写!
情况二:Boo子类 只想喝果汁 -----------需要重写!
情况三:Boo子类 又想吃西餐又想喝果汁 --------需要重写!

```java
class Aoo{ //父类
    void eat(){
        System.out.println("吃西餐");
    }
}
class Boo extends Aoo{//子类
    void eat(){
         //情况三:
          super.eat();//调用父类的eat方法
          System.out.println("喝果汁");
    }
}
-----------------------------
    main{
    Boo b = new Boo();
    //b.eat();//吃西餐


   情况二:
   b.eat();//喝果汁
}

面试题:重写与重载的区别:

重写(Override/Overrideing):发生在父子关系中,方法名和参数列表要相同!
重载(Overload/Overloading):发生在同类中(继承过来的内容也算自己),方法名相同,参数列表不同。

class Aoo{
    void show(){
        
    }
}
class Boo extends Aoo{
    void show(){ //发生了重写
        
    }
}
------------------------------
  class Aoo{
    void show(){
        
    }
}
class Boo extends Aoo{

    void show(int a){ //发生了重载,因为Boo继承了Aoo   Boo也有无参的show方法
        
    }
}

解释:父类的step方法还是有用的,我们通过向上造型通过父类来管理子类时,可以为子类提供一个统一的”入口“step行为,具体执行时,具体看对象!

画窗口:

界面绘制相关的内容 不要求掌握,工作不用。
1.在GameWorld类上方导入两个功能:
javax.swing.JFrame 和 javax.swing.Jpanle
2.GameWorld类继承JPanle
3.在GameWorld类中写一个paintWorld方法,并在main中调用

/**
     * 绘制窗口的方法
     * */
    void paintWorld(){
        JFrame frame = new JFrame();
        setFocusable(true);
        frame.add(this);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口并结束程序.
        frame.setSize(641+16,479+39);//设置窗口大小
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        GameWorld gw = new GameWorld();
        gw.paintWorld();//调用绘制窗口的方法
        gw.action();//调用action方法进行创建各类对象
    }

package(包)

如果仅仅类名为唯一标识的话,很有可能会冲突。
1000个类的话,要起1000个类名,所以java设计了包(package)。
作用:避免类命名的冲突。
现象:同一个包是不可以起同名类。
包的命名:建议全小写
域名反写.项目名称.模块名称.类名。

import(导入)

1.当前使用的类,是属于同一个包下的,那么不需要导包直接可以访问。
2.不同包下的类,若想使用,需要通过import类的全名(包名.类名)来进行才可以用!

package day01;
class A{ // day01.A   
    
}

--------------
package day02;
class A{// day02.A
    
}