You can't tell MySQL that the result of a (sub)query is a table name this way. You'd have to build a dynamic statement with the result.
SELECT @tableName:=table_name, @refId:=ref_id FROM object WHERE id = 5 LIMIT 1;
SET @sql = CONCAT('SELECT * FROM ', @tableName, ' WHERE id = ', @refId);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
UPDATE: Please have a try with a stored procedure:
DELIMITER $$
CREATE PROCEDURE procName(IN my_id INT)
BEGIN
SELECT @tableName:=table_name, @refId:=ref_id FROM object WHERE id = my_id LIMIT 1;
SET @sql = CONCAT('SELECT * FROM ', @tableName, ' WHERE id = ', @refId);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
Then execute the stored procedure with
CALL procName(5);