// Вариант 1118 public class Lab2 { public static void main(String[] args) { Archen sister = new Archeops(); Archeops daughter = new Archeops(); Archen mother = new Archen(); /* Вызовется harden от Archen */ sister.harden(); /* Вызовется roost(daughter) класса Archen, причём daughter будет рассматриваться как Archen, так как метод принимает Archen. Рассматриваться экземпляр Archeops как Archen может, потому что напрямую или косвенно наследуется от Archen. */ mother.roost(daughter); mother.stockpile(); ((Archeops)sister).foresight(); daughter.conversion(); mother.roost(sister); daughter.roost(mother); daughter.roost(sister); sister.mountainPeak(); daughter.workUp(); daughter.mountainPeak(); daughter.defenseCurl(); sister.workUp(); mother.workUp(); daughter.machSpeed(); mother.mountainPeak(); } } class Archen { protected String psychicWater = "PsychicWater"; static int alluring; protected byte jump = (byte) 0x87; protected String psychic = "Psychic"; float attack = 2.9f; protected String water = "Water"; public int juicer; public Archen() { alluring = 87; } { juicer = 87; } public void roost(Archen p) { System.out.println("Archen attacks Archen with Roost"); } public void harden() { System.out.println(psychicWater.equals(psychic+water)); // (1) equals сравнивает значения строк (равносильно сравнению массивов на идентичность) System.out.println(psychicWater == "Psychic"+water); // (2) == сравнивает ссылки на объекты строк, но это разные объекты /* (3) в случае equals без разницы, когда эта строка сформировалась — на этапе компиляции или же во время работы, поэтому при сравнении значения строк всё будет хорошо */ System.out.println(psychicWater.equals("Psychic"+"Water")); /* (4) вероятно, строка «PsychicWater» для оптимизации сформируется на этапе компиляции, поэтому эта строка будет такой же «константой», как и «PsychicWater» у поля psychicWater, поэтому они будут ссылаться на один и тот же объект */ System.out.println(psychicWater == "Psychic"+"Water"); /* (5) аналогично (3) */ System.out.println(psychicWater.equals(psychic+"Water")); /* (6) аналогично (2) */ System.out.println(psychicWater == psychic+water); } public void workUp() { System.out.println("Archen casts Work Up"); } public void stockpile() { float weight = 1.3f; System.out.println((attack - weight) == 1.6f); } public static void mountainPeak() { System.out.println("Archen casts Mountain Peak"); } public void roost(Archeops p) { System.out.println("Archen attacks Archeops with Roost"); } public void conversion() { System.out.println(jump + alluring); System.out.println(juicer - jump); System.out.println(alluring - juicer); } } class Archeops extends Archen { private int weeble; private String shadowWater = "ShadowWater"; double accuracy = 8.6; private String shadow = "Shadow"; public Archeops() { weeble = 072; } { weeble = 70; } public void foresight() { System.out.println(shadowWater == shadow+water); System.out.println(shadowWater == new String("Shadow"+"Water")); System.out.println(shadowWater == (shadow+water).intern()); System.out.println(shadowWater == new String("ShadowWater")); } public static void mountainPeak() { System.out.println("Archeops casts Mountain Peak"); } public void roost(Archen p) { System.out.println("Archeops attacks Archen with Roost"); } public void machSpeed() { double speed = 9.0; System.out.println((speed - accuracy) == 0.4); } public void roost(Archeops p) { System.out.println("Archeops attacks Archeops with Roost"); } public void defenseCurl() { System.out.println(weeble + juicer); System.out.println(weeble - alluring); System.out.println(jump - weeble); } public void workUp() { System.out.println("Archeops casts Work Up"); } }