1.接口
- 是一种数据类型(引用数据类型)
- 由interface定义
- 只能包含常量和抽象方法
- 接口不能被实例化
- 接口是需要被实现/继承的,实现类/派生类:必须重写所有抽象方法
- 一个类可以实现多个接口,用逗号分隔,若又继承又实现时,应先继承后实现
- 接口可以继承接口
/*
演示接口的语法:
1)接口中的数据,默认都是常量。接口中的方法,默认都是抽象的。
2)接口中的所有内容的访问权限都一定是public的
*/
interface Inter{
public static final int NUM = 5;
public abstract void show();
int COUNT = 5; //默认public static final
void test(); //默认public abstract
//int number; //编译错误,常量必须声明同时初始化
//void show(){} //编译错误,抽象方法不能有方法体
}
//演示接口的实现:
interface Inter1{
void show();
void test();
}
class Aoo implements Inter1{
public void show(){} //重写接口中的抽象方法时,权限必须是public的
public void test(){}
}
//演示接口的多实现:
interface Inter2{
void show();
}
interface Inter3{
void test();
}
abstract class Boo{
abstract void say();
}
class Coo extends Boo implements Inter2,Inter3{
public void show(){}
public void test(){}
void say(){}
}
//演示接口继承接口:
interface Inter4{
void test();
}
interface Inter5 extends Inter4{ //自己的show()+继承过来的test()
void show();
}
class Doo implements Inter5{
public void show(){}
public void test(){}
}
public class InterfaceDemo {
public static void main(String[] args) {
//Inter5 o1 = new Inter5(); //编译错误,接口不能被实例化
Inter5 o2 = new Doo(); //向上造型
Inter4 o3 = new Doo(); //向上造型
}
}
2.潜艇游戏第八天:
1. 炸弹入场:
- 炸弹是由战舰发射出来的,所以在Battleship中设计shootBomb()生成炸弹对象
- 炸弹入场为事件触发的,所以在侦听器中重写keyReleased()按键抬起事件/keyPressed()按键按下事件,判断若按下的是空格键:
获取炸弹对象obj,bombs扩容,将obj添加到bombs最后一个元素上
2. 战舰移动:
- 战舰移动为战舰的行为,所以在Battleship中设计moveLeft()左移、moveRight()右移
- 战舰移动为事件触发的,所以在侦听器的重写keyReleased()中:
判断若抬起的是左键头,则战舰左移
判断若抬起的是右键头,则战舰右移
3. 删除越界的海洋对象:
- 在SeaObject中设计isOutOfBounds()检测潜艇是否越界,在Bomb和Mine中重写isOutOfBounds()检测炸弹和水雷是否越界
- 删除越界的海洋对象为定时发生的,所以在run()中调用outOfBoundsAction()实现删除越界的海洋对象
在outOfBoundsAction()中:
遍历潜艇数组,判断若越界了则:将越界的替换为最后一个元素,缩容
遍历水雷数组,判断若越界了则:将越界的替换为最后一个元素,缩容
遍历炸弹数组,判断若越界了则:将越界的替换为最后一个元素,缩容
4. 设计EnemyScore得分接口,ObserveSubmarine和TorpedoSubmarine实现得分接口
设计EnemyLife得分接口,MineSubmarine实现得命接口
2.1目录展示
2.1.1Battleship类
package cn.tedu.submarine;
import javax.swing.*;
import java.util.Objects;
/**
* 战舰
*/
public class Battleship extends SeaObject{
/**
* 命
*/
private int life;
public Battleship() {
super(66,26,270,124,5);
this.life = 5;
}
/**
* 战舰移动
*/
@Override
public void move