Abstract classes in Java can also be instantiated, and java abstraction can also be used as an example.
Can an abstract class be instantiated in Java?
In the course of learning, we found a problem. abstract classes cannot use new to construct this object until they implement all abstract methods, however, abstract methods can have their own constructor methods. In this way, I am confused. Since there are constructor methods that can not be created through new, can the abstract class be instantiated when it is not changed to a specific class?
Search for information and reference through the internet: blog.sina.com.cn/s/blog_7ffb8dd5010120oe.html
An abstract class can be instantiated, but its instantiation method is not to create an object through the new method, instead, the parent class is referenced to point to the subclass instance to indirectly instantiate the parent class (because the subclass will first instantiate its parent class before it is instantiated. In this way, an object that inherits the subclass of an abstract class is created, and its parent class (abstract class) is instantiated). However, an interface cannot be instantiated (the interface does not have a constructor at all ).
The Code is as follows:
Abstract class B {private String str; public B (String a) {System. out. println ("the parent class has been instantiated"); this. str = a; System. out. println (str);} public abstract void play ();} public class A extends B {public A (String a) {super (a); System. out. println ("subclass instantiated");} @ Override public void play () {System. out. println ("I implemented the parent class method");} public static void main (String [] args) {B aa = new A ("");}}
The result is as follows:
The parent class has been instantiated.
A
Subclass has been instantiated
In addition:
GetInstance () in the Calendar ()
Calendar Cal = Calendar. getInstance ();
Calendar is an abstract class that cannot directly use the new object, but the static getInstance () provided is to create an object for the Calendar.
The instance obtained from Calendar. getInstance () is actually a "GreogrianCalendar" object.
GreogrianCalendar is a subclass of Calendar. It implements the abstract method in Calendar. By referencing the parent class, you can point to the Child class instance to indirectly instantiate the parent class. At the same time, using getInstance () has many advantages:
1. New must generate a new object and allocate memory. getInstance () does not have to be created again. It can be used to reference an existing object, which is superior to new in efficiency;
2. New can only be used once after creation, while getInstance () can be used across stack regions or remotely across regions. Therefore, getInstance () is usually used to create static instances.