加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java编译器在看到关键字extends时会做什么?

发布时间:2020-12-15 04:19:35 所属栏目:Java 来源:网络整理
导读:请考虑以下代码. A.java,主要包装: package pkgs.main;public class A { protected int x;} B.java,测试包: package pkgs.test;import pkgs.main.A;public class B extends A {} 当运行javac编译器时,它是否像这样做: A.java,测试包: package pkgs.test;
请考虑以下代码.

A.java,主要包装:

package pkgs.main;

public class A {
    protected int x;
}

B.java,测试包:

package pkgs.test;
import pkgs.main.A;

public class B extends A {
}

当运行javac编译器时,它是否像这样做:

A.java,测试包:

package pkgs.test;
import pkgs.main.A;

public class B extends A {  
    // Some "flag/code" that says:
    // Must be aware that the following new and seperate copy of x 
    // has originated from class A,which is inside a package called main.
    protected int x;
}

我之所以要问的是,我试图了解子类必须知道其继承成员的所有“属性/属性”才能运行.如果这是真的,那么这种编程继承会与“现实世界”中的继承略有不同吗?例如,我从父母那里继承了各种属性,但我完全不知道所有这些信息. (如果我的父母要去世,我可以继续操作.)然而,我想知道Java的继承在这个意义上是不是独立的,如果子类必须始终知道它从哪里得到它的继承成员,为了正确操作.

问题是,在阅读编程书籍中的继承时,我感到困惑.它们提供了涉及动物,猫和狗等现实世界对象的示例,但基于上面的段落,我想知道Java继承与Java书籍中涉及这些类型的继承示例之间是否存在微妙的“机制差异”现实世界的对象.

我与Java有关的问题是我不明白为什么我被允许执行以下操作.下面的代码是“主类”中的一些简单的“调用代码”,涉及上面已经定义的两个类(A和B).

Main.java,主要包:

package pkgs.main;
import pkgs.test.B;

// Just some method inside the "main class"
void method() {
    B b = new B();
    b.x ++;  //   <--- why is this allowed?
}

这个“调用代码”在一个名为main的包中,而类B在一个名为test的不同包中定义.这个调用代码没有扩展B类,那么为什么Java允许访问B的受保护成员x?

是解释因为受保护的成员x最初在类A中声明,它与调用代码在同一个包中?如果是真的,那么这大致符合我之前的想法,我在这里谈到了B类:

public class B extends A {  
    // Some "flag/code" that says:
    // Must be aware that the following new and seperate copy of x 
    // has originated from class A,which is inside a package called main.
    protected int x;
}

解决方法

// Some "flag/code" that says:
// Must be aware that the following new and seperate copy of x 
// has originated from class A,which is inside a package called main.
protected int x;

没有.没有’新的和单独的x’.它是从A类继承的’x’.它是一样的.这可以解释你所有的困惑.

if a child class must be aware where it got its inherited members from

当然.

Is the explanation because the protected member was originally declared inside class A?

是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读