diff --git a/docs/examples/alias_generator_config.py b/docs/examples/alias_generator_config.py
--- a/docs/examples/alias_generator_config.py
+++ b/docs/examples/alias_generator_config.py
@@ -5,12 +5,11 @@ def to_camel(string: str) -> str:
 
 class Voice(BaseModel):
     name: str
-    gender: str
     language_code: str
 
     class Config:
         alias_generator = to_camel
 
-voice = Voice(Name='Filiz', Gender='Female', LanguageCode='tr-TR')
+voice = Voice(Name='Filiz', LanguageCode='tr-TR')
 print(voice.language_code)
 print(voice.dict(by_alias=True))
diff --git a/docs/examples/alias_precedence.py b/docs/examples/alias_precedence.py
new file mode 100644
--- /dev/null
+++ b/docs/examples/alias_precedence.py
@@ -0,0 +1,21 @@
+from pydantic import BaseModel
+
+class Voice(BaseModel):
+    name: str
+    language_code: str
+
+    class Config:
+        @classmethod
+        def alias_generator(cls, string: str) -> str:
+            # this is the same as `alias_generator = to_camel` above
+            return ''.join(word.capitalize() for word in string.split('_'))
+
+class Character(Voice):
+    mood: str
+
+    class Config:
+        fields = {'mood': 'Mood', 'language_code': 'lang'}
+
+c = Character(Mood='happy', Name='Filiz', lang='tr-TR')
+print(c)
+print(c.dict(by_alias=True))
diff --git a/pydantic/fields.py b/pydantic/fields.py
--- a/pydantic/fields.py
+++ b/pydantic/fields.py
@@ -263,10 +263,10 @@ def infer(
 
     def set_config(self, config: Type['BaseConfig']) -> None:
         self.model_config = config
-        schema_from_config = config.get_field_info(self.name)
-        if schema_from_config:
+        info_from_config = config.get_field_info(self.name)
+        if info_from_config:
             self.field_info = cast(FieldInfo, self.field_info)
-            self.field_info.alias = self.field_info.alias or schema_from_config.get('alias') or self.name
+            self.field_info.alias = info_from_config.get('alias') or self.field_info.alias or self.name
             self.alias = cast(str, self.field_info.alias)
 
     @property

thanks for reporting, agreed it should apply to all fields.

Could you try on master or v1.0b2 and confirm if it's still broken?
Just tested it on `master` and can confirm it is still broken.
diff --git a/tests/test_edge_cases.py b/tests/test_edge_cases.py
--- a/tests/test_edge_cases.py
+++ b/tests/test_edge_cases.py
@@ -1079,3 +1079,43 @@ class Model(BaseModel):
 
     assert Model().__fields__.keys() == {'v'}
     assert Model.__fields__.keys() == {'v'}
+
+
+def test_alias_child_precedence():
+    class Parent(BaseModel):
+        x: int
+
+        class Config:
+            fields = {'x': 'x1'}
+
+    class Child(Parent):
+        y: int
+
+        class Config:
+            fields = {'y': 'y2', 'x': 'x2'}
+
+    assert Child.__fields__['y'].alias == 'y2'
+    assert Child.__fields__['x'].alias == 'x2'
+
+
+def test_alias_generator_parent():
+    class Parent(BaseModel):
+        x: int
+
+        class Config:
+            allow_population_by_field_name = True
+
+            @classmethod
+            def alias_generator(cls, f_name):
+                return f_name + '1'
+
+    class Child(Parent):
+        y: int
+
+        class Config:
+            @classmethod
+            def alias_generator(cls, f_name):
+                return f_name + '2'
+
+    assert Child.__fields__['y'].alias == 'y2'
+    assert Child.__fields__['x'].alias == 'x2'

Alias generator not working on inherited attributes
# Alias generator not working on inherited attributes
* OS: **Debian GNU/Linux 9 (stretch)**
* Python version `import sys; print(sys.version)`: **3.7.3**
* Pydantic version `import pydantic; print(pydantic.VERSION)`: **0.32.2**

On inherited attributes, the alias generators do not work, if the base class also has an alias generator set. Minimal example:

```py
from pydantic import BaseModel

def alias_generator_1(field_name: str) -> str:
    return field_name + '1'


def alias_generator_2(field_name: str) -> str:
    return field_name + '2'


class Base(BaseModel):
    x: int

    class Config:
        allow_population_by_alias = True
        alias_generator = alias_generator_1


class Impl(Base):
    y: int

    class Config(Base.Config):
        alias_generator = alias_generator_2


i = Impl(x=1, y=2)

# expected: {'x2': 1, 'y2': 2}
# actual: {'x1': 1, 'y2': 2}
print(i.dict(by_alias=True))
```


A simple fix is to just define the attribute again on the child like so:
```
class Impl(Base):
    x: int
    y: int

    class Config(Base.Config):
        alias_generator = alias_generator_2
```

But i would expect the `alias_generator` to be overridden for all attributes, when defined in subclasses.



tests/test_edge_cases.py::test_alias_child_precedence tests/test_edge_cases.py::test_alias_generator_parent
tests/test_edge_cases.py::test_str_bytes tests/test_edge_cases.py::test_str_bytes_none tests/test_edge_cases.py::test_union_int_str tests/test_edge_cases.py::test_union_priority tests/test_edge_cases.py::test_typed_list tests/test_edge_cases.py::test_typed_set tests/test_edge_cases.py::test_dict_dict tests/test_edge_cases.py::test_typed_dict[value0-result0] tests/test_edge_cases.py::test_typed_dict[value1-result1] tests/test_edge_cases.py::test_typed_dict[value2-result2] tests/test_edge_cases.py::test_typed_dict_error[1-errors0] tests/test_edge_cases.py::test_typed_dict_error[value1-errors1] tests/test_edge_cases.py::test_typed_dict_error[value2-errors2] tests/test_edge_cases.py::test_dict_key_error tests/test_edge_cases.py::test_tuple tests/test_edge_cases.py::test_tuple_more tests/test_edge_cases.py::test_tuple_length_error tests/test_edge_cases.py::test_tuple_invalid tests/test_edge_cases.py::test_tuple_value_error tests/test_edge_cases.py::test_recursive_list tests/test_edge_cases.py::test_recursive_list_error tests/test_edge_cases.py::test_list_unions tests/test_edge_cases.py::test_recursive_lists tests/test_edge_cases.py::test_str_enum tests/test_edge_cases.py::test_any_dict tests/test_edge_cases.py::test_infer_alias tests/test_edge_cases.py::test_alias_error tests/test_edge_cases.py::test_annotation_config tests/test_edge_cases.py::test_success_values_include tests/test_edge_cases.py::test_include_exclude_default tests/test_edge_cases.py::test_advanced_exclude tests/test_edge_cases.py::test_advanced_value_inclide tests/test_edge_cases.py::test_advanced_value_exclude_include tests/test_edge_cases.py::test_field_set_ignore_extra tests/test_edge_cases.py::test_field_set_allow_extra tests/test_edge_cases.py::test_field_set_field_name tests/test_edge_cases.py::test_values_order tests/test_edge_cases.py::test_inheritance tests/test_edge_cases.py::test_invalid_type tests/test_edge_cases.py::test_valid_string_types[a tests/test_edge_cases.py::test_valid_string_types[some tests/test_edge_cases.py::test_valid_string_types[value2-foobar] tests/test_edge_cases.py::test_valid_string_types[123-123] tests/test_edge_cases.py::test_valid_string_types[123.45-123.45] tests/test_edge_cases.py::test_valid_string_types[value5-12.45] tests/test_edge_cases.py::test_valid_string_types[True-True] tests/test_edge_cases.py::test_valid_string_types[False-False] tests/test_edge_cases.py::test_valid_string_types[a10-a10] tests/test_edge_cases.py::test_valid_string_types[whatever-whatever] tests/test_edge_cases.py::test_invalid_string_types[value0-errors0] tests/test_edge_cases.py::test_invalid_string_types[value1-errors1] tests/test_edge_cases.py::test_inheritance_config tests/test_edge_cases.py::test_partial_inheritance_config tests/test_edge_cases.py::test_annotation_inheritance tests/test_edge_cases.py::test_string_none tests/test_edge_cases.py::test_alias_camel_case tests/test_edge_cases.py::test_get_field_info_inherit tests/test_edge_cases.py::test_return_errors_ok tests/test_edge_cases.py::test_return_errors_error tests/test_edge_cases.py::test_optional_required tests/test_edge_cases.py::test_invalid_validator tests/test_edge_cases.py::test_unable_to_infer tests/test_edge_cases.py::test_multiple_errors tests/test_edge_cases.py::test_pop_by_alias tests/test_edge_cases.py::test_validate_all tests/test_edge_cases.py::test_force_extra tests/test_edge_cases.py::test_illegal_extra_value tests/test_edge_cases.py::test_multiple_inheritance_config tests/test_edge_cases.py::test_submodel_different_type tests/test_edge_cases.py::test_self tests/test_edge_cases.py::test_self_recursive[BaseModel] tests/test_edge_cases.py::test_self_recursive[BaseSettings] tests/test_edge_cases.py::test_nested_init[BaseModel] tests/test_edge_cases.py::test_nested_init[BaseSettings] tests/test_edge_cases.py::test_values_attr_deprecation tests/test_edge_cases.py::test_init_inspection tests/test_edge_cases.py::test_type_on_annotation tests/test_edge_cases.py::test_assign_type tests/test_edge_cases.py::test_optional_subfields tests/test_edge_cases.py::test_not_optional_subfields tests/test_edge_cases.py::test_scheme_deprecated tests/test_edge_cases.py::test_population_by_alias tests/test_edge_cases.py::test_fields_deprecated