(简单易懂口语化)对象的继承 - 2 成员变量 与 构造方法 的继承

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

成员变量与构造方法的继承规则

  • 内容概述
  • 一、成员变量的继承
    • 1,成员变量继承的本质
    • 2,访问的特点
    • 3,代码示例
  • 二、构造方法的继承
    • 1,构造方法的访问特点
      • 1.1 父类的构造方法 不会 被子类继承。
      • 1.2 子类 中所有的构造方法 默认先访问 父类 中的无参构造,再执行自己。
      • 1.3 如何调用父类构造方法?
  • 总结


内容概述

(全文为Java描述)
具体讲解 成员变量 与 构造方法 的继承规则
(由于篇幅限制,成员方法的内容详见主页)


一、成员变量的继承

非私有 \ private 都能
    全都能继承,但 private 需要用 set、get 方法才能动

1,成员变量继承的本质

    继承并非把父类的变量拿过来,而是拷贝了一份,并不会改变父类中的变量,本质上不一样的。
    继承是为了在子类中可以调用父类的这些变量

而倘若遇到子类与父类中有同名变量该怎么办?
这就需要了解继承中变量访问的特点了。

2,访问的特点

就近原则:
    谁离我近,我就用谁
    优先调用近层的成员变量
    都没有才会报错
    this不调局部 调子类,super不调子类 调父类

3,代码示例

//父类示例
class Fu {
    String name = "fu";
}
//子类示例
class Zi extends Fu {
    String name = "Zi";

    public void Show() {
        String name = "zishow";
        System.out.println(name);// 从局部成员往上找
        System.out.println(this.name);// 从本类成员往上找
        System.out.println(super.name);
        // 单次最多调用一个super
        // System.out.println(super.super.name); // 所以这是会报错滴!
    }
}
//测试类
public class demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.Show();
    }

}

二、构造方法的继承

非私有 \ private 都不能

假设可以,那就是说这构造方法可以直接被拿来用,但构造方法的定义规则又要求方法名要与类名一致,这就互相矛盾了。

1,构造方法的访问特点

1.1 父类的构造方法 不会 被子类继承。

1.2 子类 中所有的构造方法 默认先访问 父类 中的无参构造,再执行自己。

因为父类中的变量要继承下来,
先访问父类无参就相当于将父类中的属性进行默认初始化,要不然将无法使用父类的数据。

1.3 如何调用父类构造方法?

 1)子类构造方法的第一行语句默认都是:super();
        	不写也存在,且必须在第一行(与 this调用构造方法 只能同时存在一个)
 2)如果想要调用父类有参构造,必须手动写super进行调用
//父类
public class Person {
    String name;
    int age;

    public Person() {
        System.out.println("父类无参");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
//子类
public class Student extends Person {
    public Student() {
        // super(); // 不写虚拟机也会自动加上,在这句前不能有别的有效语句
        this("meridy", 18);// this调用其他构方法
        /* 可以做到调用空参固定为属性赋特定值 */
        // 上述两个只能选一个写,因为“构造方法只能有一个显式的构造器调用”
        System.out.println("子类无参");
    }

    public Student(String name, int age) {
        super(name, age);
    }

    public void play() {
        System.out.println(1);
    }
}
//测试类
public class constructor {
    public static void main(String[] args) {
        Student s = new Student();
        Student s1 = new Student("jonak", 19);
        System.out.println(s1.name + "," + s1.age);
    }
}

总结

本文主要讲述了 成员变量 和 构造方法 的继承规则,并附有测试代码(含详细备注)
下篇博客将讲述 | 成员方法 | 的继承规则(重中之重),敬请期待~~
若本文风格符合你的胃口,请不要吝啬你的点赞和关注,这对我来说十分重要,谢谢!

如有疑问欢迎指出,发文旨在成就更好的你我

你可能感兴趣的:(Java学习,java,开发语言,考研,学习方法,改行学it,学习)