In IPv4 we have class A, class B, and class C. In IPv6 we have only global prefix and Interface ID. I know there are plenty of addresses in IPv6 but it gives room for too many host addresses.And when it comes to P2P links only two addresses are used but /64 gives around 18 quintillion possible addresses that's a terrible waste of ip addresses. Is it good or bad practice to subnet the address beyond global prefix ?
IPv4 classes A, B and C have been deprecated since the publication of RFC 1519 in 1993.
I agree with you that 64 bits for host addresses is more than anybody will ever need, but that is how it is designed and never having to worry about subnet sizes is wonderful! :)
The classes of networks have not existed since around 1995; they are irrelevant, since they referred to permanent allocations, which have not been available in almost two decades. People use the term "class C" to refer to a /24 network segment out of historical habit, and newer engineers have picked up the habit without really knowing the history. Tell me, do you know what "Class E" networks were reserved for (hint: ask anyone who did DARPA or NSFNet research between mid 1980s and mid 1990s)? Do you know any telecoms operating multicast-backbone devices that refer to the 18.104.22.168/4 as "Class D"?
In point-to-point segments, use "IP UNNUMBERED", and point your route to segments beyond the point-to-point link (an interface on a router terminating a point-to-point link is rarely interesting; your users probably care abut a resource behind it).
For your allocation, use segments that are a consistent /64. I know it sounds wasteful and sparse, but it will make everything A LOT easier, and you are unlikely to run out of addresses. If you do, get a second allocation, and document your network, as it is probably a GOOGLE-scale or DoD-scale network.
In IPv6, the standard is a /64 for every non-point-to-point segment, and standard allocations of /48 (this means you can break every allocation into 65536 individual segments ; one or two allocations are likely more than you will ever need for all but the largest, most complex networks). RFC 6177 also recommends smaller allocations of /56 for SOHO networks, and possibly flexible allocation sizes for larger networks, although I have trouble imagining a /32 allocation outside of an ISP that is giving addresses from its allocation (the way IPv4 ISPs do) instead of sending their customers directly to ARIN.
In fact, there is not room for too many hosts. The size of the network identifier makes possible mechanisms like SLAAC, opaque interface identifier, or privacy extensions (and several more). Each of these mechanisms need a large space to pick - more or less - randomly an interface identifier with next to negligible probability for a collision. Alas, the proven patterns and paths from Legacy IP make you (and many other admins) think that addresses are wasted and hinder you to unleash the power of IPv6.
N.B. doing away with subnets and subnet masks eliminates a big source of trouble. Subnetting in IPv6 is as simple as it possibly gets.
IPv6 actually does have classful addressing, although not by that name, and there is only one class instead of the three classes A, B and C that we have in IPv4 (there also is an equivalent to class D in IPv6. Not sure about class E).
Update: @RonMaupin points out that IPv6 is technically classless. What I mean here is that the restriction on /64 subnets has the same practical effect as classes did in IPv4, in that it imposes a very ridgid subnetting structure.
IPv6 is actually more restrictive than the IPv4 classes.
In IPv4, the classes are basically just conventions (and, as others have pointed out, classes have been deprecated for a very long time); except for RIP version 1, I know of nothing that has assumptions about classes hard-coded. If you use a class A prefix wih a /29 subnet mask, pretty much nothing breaks.
In IPv6, on the other hand, you simply cannot subnet to anything less than a /64 without breaking a lot, such as SLAAC and Neighbor Discovery.
You can't simply create a /68 or a /120 subnet and expect things to work. You can use a /127 for point-to-point networks, but only because a point-to-point network generally doesn't need anything beyond bare static IP addresses.