Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Вот пример:
public abstract class AbstractClass
{
public abstract void abstractMethod();
public void implementedMethod()
{ System.out.print("implementedMethod()"); }
public final void finalMethod()
{ System.out.print("finalMethod()"); }
}
Обратите внимание, что "abstractMethod()" не имеет
тела метода. Из-за этого вы не можете сделать
следующее:
public class ImplementingClass extends
AbstractClass
{
// ERROR!
}
Нет метода, реализующего abstractMethod()! Таким
образом, JVM не может знать, что он должен делать,
когда он получает что-то вроде new
ImplementingClass().abstractMethod().
Здесь правильный ImplementingClass.
public class ImplementingClass extends
AbstractClass
{
public void abstractMethod()
{ System.out.print("abstractMethod()"); }
}
Обратите внимание, что вам не нужно
определять implementedMethod() или finalMethod().
Они уже были определены AbstractClass.
Здесь еще один правильный ImplementingClass.
public class ImplementingClass extends
AbstractClass
{
public void abstractMethod()
{ System.out.print("abstractMethod()"); }
public void implementedMethod()
{ System.out.print("Overridden!"); }
}
В этом случае вы
переопределили implementedMethod().
Однако из-за ключевого слова final невозможно
выполнить следующее.
public class ImplementingClass extends
AbstractClass
{
public void abstractMethod()
{ System.out.print("abstractMethod()"); }
public void implementedMethod()
{ System.out.print("Overridden!"); }
public void finalMethod()
{ System.out.print("ERROR!"); }
}
Вы не можете этого сделать, потому что
реализация finalMethod() в AbstractClass помечена
как окончательная реализация finalMethod():
никакие другие реализации не будут разрешены.
Теперь вы также можете реализовать абстрактный
класс дважды:
public class ImplementingClass extends
AbstractClass
{
public void abstractMethod()
{ System.out.print("abstractMethod()"); }
public void implementedMethod()
{ System.out.print("Overridden!"); }
}
// In a separate file.
public class SecondImplementingClass extends
AbstractClass
{
public void abstractMethod()
{ System.out.print("second
abstractMethod()"); }
}
Теперь вы можете написать другой метод.
public tryItOut()
{
ImplementingClass a= new
ImplementingClass();
AbstractClass b = new ImplementingClass();
a.abstractMethod(); // prints
"abstractMethod()"
a.implementedMethod(); // prints
"Overridden!" <-- same
a.finalMethod(); // prints
"finalMethod()"
b.abstractMethod(); // prints
"abstractMethod()"
b.implementedMethod(); // prints
"Overridden!" <-- same
b.finalMethod(); // prints
"finalMethod()"
SecondImplementingClass c = new
SecondImplementingClass();
AbstractClass d = new
SecondImplementingClass();
GraphicObject (){
System.out.println("GraphicObject is
created");
}
void moveTo(int y, int x) {
System.out.println("Change position
according to "+ x+ " and " + y);
}
abstract void draw();
}