diff --git a/core/lib/Drupal/Core/Field/FieldConfigBase.php b/core/lib/Drupal/Core/Field/FieldConfigBase.php
index a7790a3..62eb9b5 100644
--- a/core/lib/Drupal/Core/Field/FieldConfigBase.php
+++ b/core/lib/Drupal/Core/Field/FieldConfigBase.php
@@ -146,7 +146,7 @@
    *
    * @var array
    */
-  public $default_value = array();
+  protected $default_value = array();
 
   /**
    * The name of a callback function that returns default values.
@@ -232,6 +232,13 @@ public function getTargetBundle() {
   /**
    * {@inheritdoc}
    */
+  public function getTheDefaultValue() {
+    return $this->default_value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function calculateDependencies() {
     parent::calculateDependencies();
     // Add dependencies from the field type plugin. We can not use
diff --git a/core/lib/Drupal/Core/Field/FieldConfigInterface.php b/core/lib/Drupal/Core/Field/FieldConfigInterface.php
index 11da0df..a3d56a4 100644
--- a/core/lib/Drupal/Core/Field/FieldConfigInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldConfigInterface.php
@@ -94,6 +94,19 @@ public function setSetting($setting_name, $value);
   public function setRequired($required);
 
   /**
+   * Gets the set default value.
+   *
+   * Note that if a default value callback is set, it will take precedence over
+   * any value here.
+   *
+   * @return mixed $value
+   *   The default value in the format as returned by
+   *   \Drupal\Core\Field\FieldDefinitionInterface::getDefaultValue().
+   *
+   */
+  public function getTheDefaultValue();
+
+  /**
    * Sets a default value.
    *
    * Note that if a default value callback is set, it will take precedence over
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
index fa0b4a0..8d2f7a8 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
@@ -284,11 +284,12 @@ public function hasNewEntity() {
    */
   public static function calculateDependencies(FieldDefinitionInterface $field_definition) {
     $dependencies = [];
-    if (is_array($field_definition->default_value) && count($field_definition->default_value)) {
+    $default_value = $field_definition->getTheDefaultValue();
+    if (is_array($default_value) && count($default_value)) {
       $target_entity_type = \Drupal::entityManager()->getDefinition($field_definition->getFieldStorageDefinition()->getSetting('target_type'));
-      foreach ($field_definition->default_value as $default_value) {
-        if (is_array($default_value) && isset($default_value['target_uuid'])) {
-          $entity = \Drupal::entityManager()->loadEntityByUuid($target_entity_type->id(), $default_value['target_uuid']);
+      foreach ($default_value as $value) {
+        if (is_array($value) && isset($value['target_uuid'])) {
+          $entity = \Drupal::entityManager()->loadEntityByUuid($target_entity_type->id(), $value['target_uuid']);
           // If the entity does not exist do not create the dependency.
           // @see \Drupal\Core\Field\EntityReferenceFieldItemList::processDefaultValue()
           if ($entity) {
@@ -305,14 +306,15 @@ public static function calculateDependencies(FieldDefinitionInterface $field_def
    */
   public static function onDependencyRemoval(FieldDefinitionInterface $field_definition, array $dependencies) {
     $changed = FALSE;
-    if (!empty($field_definition->default_value)) {
+    $default_value = $field_definition->getTheDefaultValue();
+    if (!empty($default_value)) {
       $target_entity_type = \Drupal::entityManager()->getDefinition($field_definition->getFieldStorageDefinition()->getSetting('target_type'));
-      foreach ($field_definition->default_value as $key => $default_value) {
-        if (is_array($default_value) && isset($default_value['target_uuid'])) {
-          $entity = \Drupal::entityManager()->loadEntityByUuid($target_entity_type->id(), $default_value['target_uuid']);
+      foreach ($default_value as $key => $value) {
+        if (is_array($value) && isset($value['target_uuid'])) {
+          $entity = \Drupal::entityManager()->loadEntityByUuid($target_entity_type->id(), $value['target_uuid']);
           // @see \Drupal\Core\Field\EntityReferenceFieldItemList::processDefaultValue()
           if ($entity && isset($dependencies[$entity->getConfigDependencyKey()][$entity->getConfigDependencyName()])) {
-            unset($field_definition->default_value[$key]);
+            unset($field_definition->$value[$key]);
             $changed = TRUE;
           }
         }
diff --git a/core/modules/field_ui/src/Form/FieldConfigEditForm.php b/core/modules/field_ui/src/Form/FieldConfigEditForm.php
index 52ace95..a1c2613 100644
--- a/core/modules/field_ui/src/Form/FieldConfigEditForm.php
+++ b/core/modules/field_ui/src/Form/FieldConfigEditForm.php
@@ -171,7 +171,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       $items = $form['#entity']->get($this->entity->getName());
       $default_value = $items->defaultValuesFormSubmit($form['default_value'], $form, $form_state);
     }
-    $this->entity->default_value = $default_value;
+    $this->entity->setDefaultValue($default_value);
 }
 
   /**
diff --git a/core/modules/field_ui/src/Tests/ManageFieldsTest.php b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
index 3b90bff..cf0dce7 100644
--- a/core/modules/field_ui/src/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
@@ -399,7 +399,7 @@ function testDefaultValue() {
     $this->drupalPostForm($admin_path, $edit, t('Save settings'));
     $this->assertText("Saved $field_name configuration", 'The form was successfully submitted.');
     $field = FieldConfig::loadByName('node', $this->contentType, $field_name);
-    $this->assertEqual($field->default_value, array(array('value' => 1)), 'The default value was correctly saved.');
+    $this->assertEqual($field->getTheDefaultValue(), array(array('value' => 1)), 'The default value was correctly saved.');
 
     // Check that the default value shows up in the form
     $this->drupalGet($admin_path);
@@ -410,7 +410,7 @@ function testDefaultValue() {
     $this->drupalPostForm(NULL, $edit, t('Save settings'));
     $this->assertText("Saved $field_name configuration", 'The form was successfully submitted.');
     $field = FieldConfig::loadByName('node', $this->contentType, $field_name);
-    $this->assertEqual($field->default_value, NULL, 'The default value was correctly saved.');
+    $this->assertEqual($field->getTheDefaultValue(), NULL, 'The default value was correctly saved.');
 
     // Check that the default value can be empty when the field is marked as
     // required and can store unlimited values.
@@ -428,7 +428,7 @@ function testDefaultValue() {
     $this->drupalPostForm(NULL, array(), t('Save settings'));
     $this->assertText("Saved $field_name configuration", 'The form was successfully submitted.');
     $field = FieldConfig::loadByName('node', $this->contentType, $field_name);
-    $this->assertEqual($field->default_value, NULL, 'The default value was correctly saved.');
+    $this->assertEqual($field->getTheDefaultValue(), NULL, 'The default value was correctly saved.');
 
     // Check that the default widget is used when the field is hidden.
     entity_get_form_display($field->getTargetEntityTypeId(), $field->getTargetBundle(), 'default')
diff --git a/core/modules/hal/src/Tests/DenormalizeTest.php b/core/modules/hal/src/Tests/DenormalizeTest.php
index c8f1590..d376ae5 100644
--- a/core/modules/hal/src/Tests/DenormalizeTest.php
+++ b/core/modules/hal/src/Tests/DenormalizeTest.php
@@ -85,7 +85,7 @@ public function testTypeHandling() {
   public function testMarkFieldForDeletion() {
     // Add a default value for a field.
     $field = FieldConfig::loadByName('entity_test', 'entity_test', 'field_test_text');
-    $field->default_value = array(array('value' => 'Llama'));
+    $field->setDefaultValue(array(array('value' => 'Llama')));
     $field->save();
 
     // Denormalize data that contains no entry for the field, and check that
