当前位置: 首页 > 知识库问答 >
问题:

为什么我不能访问在嵌套类中声明的变量?

聂奇
2023-03-14

我的朋友们,我的项目有三节课

主类:

public class Main {

    public static void main(String[] args) {
        Student s1 = new Student();
    }
}
public class Student {
    private String name;
    private int id;
    private Date date = new Date();

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }
}
public class Date {
    private int d;
    private int m;
    private int y;

    public int getD() {
        return d;
    }

    public void setD(int d) {
        this.d = d;
    }

    public int getM() {
        return m;
    }

    public void setM(int m) {
        this.m = m;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}

首先,当我在main类中实例student时,java使结构如下所示:structure

我的意思是,当我们在main类中实例student类时,java逐行读取student类,例如:字符串名称,int id,Date Date=new Date();

因为date中有3个变量,所以我们可以说,当我们实例student类时,我们有5个变量。

例如,Student s1=new Student();我们有字符串name、intid、intd、intm、inty来表示s1。我的问题是为什么我们不能直接访问s1.ys1.ms1.d

例如,对于initialize name,我们可以使用以下代码:s1.setname();,但是为什么我们不能使用以下代码:s1.setdate().setm()???

共有1个答案

龚迪
2023-03-14

执行以下代码时

        Student s1 = new Student();

您实际上正在创建2个对象:

  1. 一个student对象,您可以通过S1引用访问该对象。
  2. 一个date对象,与上面的student一起自动创建。

那是两个分开的物体。student只有3个属性(name、id、date),而dateobject也有3个属性(d、m、y)。

要访问对象的属性,需要使用它的引用。因为s1引用Student对象,所以可以使用它访问此对象的成员。但是,为了访问date对象的成员,您需要获得它的引用,该引用存储在Student对象的date属性中。

因此,使用s1.getdate()可以获得这个引用,然后可以使用它访问日期的成员(即它的set***方法)

 类似资料:
  • 我正在标准中寻找对这一事实的正式解释。我找到了3.9.1/9所说的,并试图用该部分给出解释。 第3.9.1/9节,N3797: void类型有一组空值。void类型是不完整的类型,无法完成。它用作不返回值的函数的返回类型。任何表达式都可以显式转换为cv void类型(5.4)。void类型的表达式只能用作表达式语句(6.2)、逗号表达式的操作数(5.18)以及?的第二个或第三个操作数:(5.16)

  • 问题内容: 为什么我们不能对Java类的方法内部声明的变量使用访问说明符? 问题答案: 因为这没有意义。方法中声明的变量是该方法的局部变量。即它们不能在方法之外访问。修改变量的声明将实现什么?

  • 问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路

  • 问题内容: 为什么不能在Java中将类声明为静态类? 问题答案: 只有嵌套的类可以是静态的。这样,你可以使用嵌套类而无需外部类的实例。

  • 我声明了一个自定义trait 的数组,以便在Rust中试验多态性,但是编译器似乎在第一个元素的子类型上进行类型推断: 编译器抱怨第一个元素是< code>Cat而不是其他元素: 向数组中添加类型也不能解决问题。因为这一次我得到了更多的错误:

  • 问题内容: 在这里只能是最终的。为什么?如何在不保留为私有成员的情况下重新分配方法? 单击该如何返回? 问题答案: 如注释中所述,其中一些在Java 8中变得无关紧要,在Java 8中final可以隐式使用。但是,只能在匿名内部类或lambda表达式中使用有效的最终变量。 这基本上是由于Java管理闭包的方式。 创建匿名内部类的实例时,该类中使用的任何变量都将通过自动生成的构造函数复制其值。这样避