Add a filter inside an action init

To alter the page ID before the query is run, hook the request filter.

If you’re using pretty permalinks, pagename will be set, you can overwrite pagename with another page slug:

function wpd_265903_request( $request ) {
    if( isset( $request['pagename'] ) ){ // any page
        $request['pagename'] = 'some-other-slug';
    }
    return $request;
}
add_filter('request', 'wpd_265903_request');

or you can unset pagename and set page_id:

function wpd_265903_request( $request ) {
    if( isset( $request['pagename'] ) ){
        unset( $request['pagename'] );
        $request['page_id'] = 106;
    }
    return $request;
}
add_filter( 'request', 'wpd_265903_request' );