Folour, ![]()
Попробую объяснить ещё раз.
В интерфейсе можно только объявить методы. Реализовывать нельзя. Они выступают гарантом, что у класса, их реализовывающего, будут методы, определённые в интерфейсе. Можно ещё просто определить пустой интерфейс и реализовать его. Ну не суть. Это всё детали.
Абстрактный класс. Отличается от обычного класса тем, что создать его экземпляр нельзя.
Так же, как и интерфейс, может содержать определения методов. Только в этом случае метод должен быть объявлен абстрактным.
Можно реализовать метод прямо в абстрактном классе и обращаться к нему так же, как и к методам обычного класса. Нужно только отнаследоваться от этого класса. В этом их отличие от интерфейсов.
К instance-методам и свойствам НЕЛЬЗЯ обращаться так, словно они статические.
Статические же методы и свойства могут быть определены как и в абстрактных, так и в обычных классах. Причём они здесь, я не понимаю.