La dependencia en los buenos diseños se da en niveles más altos de abstracción, no en una clase que trabaja a bajo nivel como una conexión a la base de datos, estarías reescribiendo PDO intentando algo así, osea, reinventando la rueda.
Lo que deben hacer tus objetos es depender de la base de datos y para eso debes inyectar esa dependencia en el constructor de esos objetos dependientes. 
te pongo un ejemplo rápido:   
Código PHP:
Ver original<?php
 
abstract class BaseDeDatos {
 
    private $db;
 
    function __construct(PDO $db) {
        $this->db = $db;
    }
 
    protected function execute
($statement, array $args = []) {         $stmt = $this->db->prepare($statement);
        $stmt->execute($args);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
 
}
 
interface Persona {
 
    function getNombre();
 
    function getApellido();
 
}
 
class Usuario extends BaseDeDatos implements Persona {
 
    function getNombre() {
        return $this->execute('SELECT nombre FROM tabla_usuarios WHERE id = 1;')[0]['nombre'];
    }
 
    function getApellido() {
        return $this->execute('SELECT apellido FROM tabla_usuarios WHERE id = 1;')[0]['apellido'];
    }
 
}
 
interface PlantillaPersona {
 
    function dibujar(Persona $persona);
 
}
 
class PersonaEnTabla implements PlantillaPersona {
 
    function dibujar(Persona $persona) {
        return
            "<table><tr><th>Nombre</th><th>Apellido</th></tr>" .
            "<tr><td>{$persona->getNombre()}</td><td>{$persona->getApellido()}</td></tr></table>";
    }
 
}
 
class PersonaEnDiv implements PlantillaPersona {
 
    function dibujar(Persona $persona) {
        return
            "<div><label>Nombre</label><span>{$persona->getNombre()}</span>" .
            "<label>Apellido</label><span>{$persona->getApellido()}</span></div>";
    }
 
}
 
 
// para acabar haciendo algo así (todo lo que no deberías hacer dentro de las clases):
$db = new PDO('dsn', 'user', 'pass');
 
$usuario = new Usuario($db);
 
echo "Persona dibujada en una tabla:";
echo (new PersonaEnTabla)->dibujar($usuario);
 
echo "Persona dibujada en una capa div:";
echo (new PersonaEnDiv)->dibujar($usuario);
  
Como ves la inyección de dependencia se da en la lógica de negocio (no en la conexión a la base de datos, que para eso ya esta PDO), en el nivel más alto de abstracción de tu aplicación.