关于java中继承机制的一些猜想

关于java中继承机制的一些猜想


前言

Java作为当下热门的语言之一,拥有着面向对象的强大特性,其不仅吸收了C++语言的各种优点,还摒弃了C++中难以理解的多继承(改为了多层继承)和指针,方便了我们将现实生活中的事物,通过类的概念进行表达出来,其核心有三大特点,封装,继承,多态,今天我就来谈一谈我对java继承的一些浅显理解.

问题

    java中继承这一特点,大大方便了我们编写代码,提高了代码的复用性,以及维护性,同时他也是多态的前提.但关于继承在此我有些猜想.我们都知道,在创建一个类的实例对象的时候,首先都会默认访问这个类父类的空参构造,完成父类对象的初始化,再进行子类对象的初始化,这是因为子类继承了父类的数据,并且随时有可能访问父类的数据,但在这里的继承一词,我不太理解,首先我的第一反应就是,将父类的代码原封不动的在子类中重写一遍.从而达到继承这个功能,但是在不断地学习当中,我感觉到这个理论好像不足以支撑我接下来的学习了,让我发现问题的代码如下:

public class test {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.setName("小明");
        zi.setAge(19);
        /*
        *   通过了解继承的机制,知道父类的私有成员,子类是无法继承的,对子类对象不可见
        *       但是这里我们通过访问父类对外公开的方法(setName(...)以及setAge(...)),操作到了父类中的name以及age属性
        *       既然说了,子类无法继承到父类的私有成员,那么这个name以及age肯定是父类的实例对象中的属性
        *       为了检验我的理论,我给Zi类设置了一个public访问类型的name,age成员变量
        *       但是经过setName(...)以及setAge(...)后返回值还是其默认值,null和0,说明Zi类从父类继承过来的setName(...)以及setAge(...)
        *       操纵的是父类实例的name以及age
        *
        *   结论:
        *       继承的实质类似于俄罗斯套娃,在创建子类对象的时候,先创建父类对象,这里的父类就类似于小娃,而子类就是最外层的娃,
        *       每个娃里面都有各自的属性,以及方法,在调用里面的方法的时候,会出现一个上下文环境,专门对这个娃里面的成员进行操作,
        *       访问继承的成员分为两个步骤
        *           1. 一层层的拆开套娃,如果找到的话就先确定这个
        *           2. 再看这个成员的访问权限,如果可以访问就可以在这个执行上下文中使用了
        *
        *  */

        System.out.println(zi.getName() + "..." +  zi.getAge()); //    输出小明...19
        System.out.println(zi.name + "..." + zi.getAge());  //    null...19
    }
}

class Fu{
    private String name;
    private int age;

    public Fu() {

    }

    public Fu(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class Zi extends Fu{
    public String name;
    public int age;

    public Zi(){

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



结论

    通过了解继承的机制,知道父类的私有成员,子类是无法继承的,对子类对象不可见,但是这里我们通过访问父类对外公开的方法(setName(…)以及setAge(…)),操作到了父类中的name以及age属性,既然说了,子类无法继承到父类的私有成员,那么这个name以及age肯定是父类的实例对象中的属性,为了检验我的理论,我给Zi类设置了一个public访问类型的name,age成员变量,但是经过setName(…)以及setAge(…)后返回值还是其默认值,null和0,说明Zi类从父类继承过来的setName(…)以及setAge(…),操纵的是父类实例的name以及age

    结论:
    继承的实质类似于俄罗斯套娃,在创建子类对象的时候,先创建父类对象,这里的父类就类似于小娃,而子类就是最外层的娃,
    每个娃里面都有各自的属性,以及方法,在调用里面的方法的时候,会出现一个上下文环境,专门对这个娃里面的成员进行操作.


    访问继承的成员分为两个步骤

  1. 一层层的拆开套娃,如果找到的话就先确定这个
  2. 再看这个成员的访问权限,如果可以访问就可以在这个执行上下文中使用了

在这里插入图片描述

以上内容仅为猜想,后续我会验证我的理论,再上传一篇博客,如果大家能直接直接在评论区指出我的错误,在下感激不尽,个人的学习总是枯燥乏味,希望大家能指出我的错误,教导我,谢谢大家

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值