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