נראה שלא הבנת את נושא הירושה ופולימורפיזם...
ראשית, שים לב שבדוגמה שלך, הקוד למעשה זהה בכל מצב, ולכן מבנה ה-if מיותר לחלוטין.
כל הרעיון בהורשה הוא שלא תצטרך לבדוק איזה אובייקט יש לך.
אם אתה עדיין נאלץ לבדוק, סימן שאתה עושה משהו לא נכון.
אם יש לך מתודה paintOptions פשוט תדאג לממש אותה בכל מחלקה יורשת, וודא שהיא אינה private במחלקת האב כדי שניתן יהיה לרשת אותה.
אבל, השאלה האמתית היא, האם אתה בכלל צריך "מחלקת אב".
ב-Java אין "פונקציה ווירטואלית טהורה" כמו שיש ב-++C. אם אתה רוצה שכמה אובייקטים יתנהגו זהה ויממשו את אותן הפונקציות, אבל אין שום קוד משותף לפונקציות האלה שאפשר לשים במחלקת בסיס, כדאי להגדיר Interface במקום.
האם יש לך בכלל קוד שצריך "לחיות" במחלקת "כלי"? קוד שמשותף לכל הכלים?
ועוד עצה לדרך: הימנע משימוש במשתנים בעלי שם לא מובן, בעיקר שם של אות אחת.
זה בסדר להשתמש ב-i ו-j ללולאות, וזה הגיוני להשתמש ב-x ו-y לציון נקודה, אבל מעבר לזה כדאי לתת שמות משמעותיים יותר מ-a, b ,c וכו'