@startuml
'https://plantuml.com/class-diagram

abstract class AbstractFlyingObject
{
    # locationX:int
    # locationY:int
    # speedX:int
    # speedY:int
    # image:BufferedImage
    # width:int
    # height:int
    # isValid:boolean

    + AbstractFlyingObject(int locationX, int locationY, int speedX, int speedY)
    + forward():void
    + crash(AbstractFlyingObject flyingObject):boolean
    + setLocation(double locationX, double locationY):void
    + getLocationX():int
    + getLocationY():int
    + getSpeedY():int
    + getImage():BufferedImage
    + getWidth():int
    + getHeight():int
    + notValid():boolean
    + vanish():void
}
abstract class AbstractAircraft
{
	# axHp:int
    # hp:int
    + AbstractAircraft(int locationX, int locationY, int speedX, int speedY, int hp)
    + decreaseHp(int decrease):void
    + getHp():int
    + {abstract} shoot():List<BaseBullet>
 }

abstract class BaseBullet
{
    - power:int
    + BaseBullet(int locationX, int locationY, int speedX, int speedY, int power)
    + forward():void
	+ getPower():int
}

abstract class AbstractProp
{
    - int species
    + Prop(int locationX, int locationY, int speedX, int speedY):void
}

AbstractFlyingObject <|-- AbstractAircraft
AbstractFlyingObject <|-- BaseBullet
AbstractFlyingObject <|-- AbstractProp

AbstractAircraft <|-- HeroAircraft
AbstractAircraft <|-- MobEnemy
AbstractAircraft <|-- EliteEnemy
AbstractAircraft <|-- BossEnemy

BaseBullet <|-- HeroBullet
BaseBullet <|-- EnemyBullet

AbstractProp <|-- BloodProp
AbstractProp <|-- BulletProp
AbstractProp <|-- BombProp

class HeroAircraft {
    - shootNum:int
    - power:int
    - direction:int
    + HeroAircraft(int locationX, int locationY, int speedX, int speedY, int hp)
    + forward():void
    + shoot():List<BaseBullet>
}

class MobEnemy {
    + MobEnemy(int locationX, int locationY, int speedX, int speedY, int hp)
    + forward():void
    + shoot():List<BaseBullet>
}

class EliteEnemy{
    - int shootNum
    - int power
    - int direction
    + EliteEnemy(int locationX,int locationY,int speedX,int speedY,int hp):void
    + forward():void
    + shoot():List<BaseBullet>
}

class BossEnemy{
    - int shootNum
    - int power
    - int direction
    + BossEnemy(int locationX,int locationY,int speedX,int speedY,int hp):void
    + forward():void
    + shoot():List<BaseBullet>
}

class HeroBullet {
    + HeroBullet(int locationX, int locationY,
     int speedX, int speedY, int power)
}

class EnemyBullet {
    + EnemyBullet(int locationX, int locationY,
     int speedX, int speedY, int power)
}

class BloodProp{
    + BloodProp(int locationX,int locationY,int speedX,int speedY):void
}

class BulletProp{
    + BulletProp(int locationX, int locationY,int speedX, int speedY):void
}

class BombProp{
    + BombProp(int locationX, int locationY,int speedX, int speedY):void
}

@enduml