Наследование - это когда «класс» наследуется от существующего «класса». Так что если у вас есть класс Person
, то у вас есть класс Student
, который расширяет Person
, Student
наследует все вещи, которые есть у Person
. Есть некоторые подробности относительно модификаторов доступа, которые вы помещаете в поля / методы в Person, но это основная идея. Например, если у вас есть приватное поле на Person
, Student
не увидит его, потому что его приватные и приватные поля не видны подклассам.
Полиморфизм имеет дело с тем, как программа решает, какие методы она должна использовать, в зависимости от того, что она имеет. Если у вас есть Person
, который имеет метод read
, и у вас есть Student
, который расширяет Person
, который имеет собственную реализацию read
, то какой метод вызывается, определяется для вас во время выполнения в зависимости от того, есть ли у вас Person
или Student
. Это немного сложно, но если вы сделаете что-то вроде
Person p = new Student();
p.read();
метод чтения в Student вызывается. Это полиморфизм в действии. Вы можете сделать это назначение, потому что Student
является Person
, но среда выполнения достаточно умна, чтобы знать, что фактический тип p
равен Student .
Обратите внимание, что детали различаются для разных языков. Например, вы можете выполнять наследование в javascript, но оно полностью отличается от того, как оно работает в Java.