关于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
结论:
继承的实质类似于俄罗斯套娃,在创建子类对象的时候,先创建父类对象,这里的父类就类似于小娃,而子类就是最外层的娃,
每个娃里面都有各自的属性,以及方法,在调用里面的方法的时候,会出现一个上下文环境,专门对这个娃里面的成员进行操作.
访问继承的成员分为两个步骤
- 一层层的拆开套娃,如果找到的话就先确定这个
- 再看这个成员的访问权限,如果可以访问就可以在这个执行上下文中使用了
以上内容仅为猜想,后续我会验证我的理论,再上传一篇博客,如果大家能直接直接在评论区指出我的错误,在下感激不尽,个人的学习总是枯燥乏味,希望大家能指出我的错误,教导我,谢谢大家