TL;DR: Refrain from ´private´ methods.

Still in version 4.0 of WordPress ´wp-includes/wp-db.php´ (but introduced in changeset 27075) we find this setup:

/**
 * WordPress Database Access Abstraction Object
 *
 * It is possible to replace this class with your own
 * by setting the $wpdb global variable in wp-content/db.php
 * file to your class. The wpdb class will still be included,
 * so you can extend it or simply use your own.
 *
 * @link http://codex.wordpress.org/Function_Reference/wpdb_Class
 *
 * @package WordPress
 * @subpackage Database
 * @since 0.71
 */
class wpdb {
//...
	public function query( $query ) {
//...
		$this->_do_query( $query );
//...
				$this->_do_query( $query );
//...
	}

//...
	private function _do_query( $query ) {
//...
	}
//...
}

It’s quite unfortunate that ´_do_query´ was declared ´private´ because if you inherit from ´wpdb´ (see the header of the class) and override ´public function query´ then you also have to override ´_do_query´ just because.

In fact, due to how private functions work in PHP (they can only be called from methods of the same class that defines them), you cannot call the inherited ´function _do_query´ from your overridden ´function query´, which instead is the most natural thing to do.

If possible, always prefer ´protected´ to ´private´ in PHP. If it had been declared ´protected function _do_query´ I could have called its inherited code from my ´public function query´.