A public IP address is reachable from the Internet. You can use it for communication between your instances and the Internet and is assigned to your instance but not associated with your AWS account.
AWS release your instance's public IP address when it is stopped/hibernated/terminated. You will receive a new one when you restart it. So, basically it is dynamic in nature.
An Elastic IP address is a public IPv4 address which you can allocate to your account and is reachable from internet. You can associate/disassociate it to/from instances as per your requirement. And is associated with your AWS account. When you attach an Elastic IP to your instance, it does not change if you stop/hibernate your instance.
Want to Learn AWS, check out this AWS Course by Intellipaat.