(2) For input and output streams. You first need to understand that any output stream input stream is inherited from OutputStream InputStream and Writer Reader. to put it simply all the ancestors of the character stream are (Writer or Reader) and all the ancestors of the byte stream are
(OutputStream or InputStream) in which the ancestors of the byte stream are
(OutputStream or InputStream) in which the ancestors of the byte stream are
(OutputStream or InputStream). InputStream) where you also have to understand the difference between characters and bytes. Finally all the above ancestors are abstract. So to implement them all is done through polymorphism. Using a reference from the parent class refers to an instance of the child class.
(3) Java network programming this is not good. All have to the usual understanding coupled with the network class
(4) java database programming this is more important. First you have to know. Commonly used databases are those. Then how to make java program and database connection. Generally used are thin (for oracle) and then. You have to remember those very fixed format. For example, what drive characters ah. There is the url ah. And so on each database is not the same. For example, oralce you want to load the driver you have to use Class.forName ("oracle.jdbc.driver.OracleDriver"); which is inside the format of each database are not the same. Finally, you have to know how to query a database from the results you want. And then how to get the results through the program. This is jdbc provides some of the methods. For example, like what ResulSet object ah. And so on. In short, more practice will be able to understand.