Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从其他类访问值以及如何访问基类变量_Java - Fatal编程技术网

Java 从其他类访问值以及如何访问基类变量

Java 从其他类访问值以及如何访问基类变量,java,Java,我尝试了一些java代码来访问变量,我的代码如下 class FirstClass { public String className = "FirstClass"; int arg=100; private String insideVariable="Private"; } class SecondClass extends FirstClass{ public String className="SecondClass"; public String

我尝试了一些java代码来访问变量,我的代码如下

class FirstClass {
    public String className = "FirstClass";
    int arg=100;
    private String insideVariable="Private";
}
class SecondClass extends FirstClass{
    public String className="SecondClass";
    public String extend=new FirstClass().className;
}

public class Access {
    public static void main(String[] args) {
        System.out.println(new FirstClass().className);
        System.out.println(new SecondClass().className);
        System.out.println(new SecondClass().arg);
        System.out.println(new SecondClass().extend);
    }
}
我有以下问题,

  • 我可以通过使用新建FirstClass.className新建SecondClass()访问className变量值。className,这是创建对象还是函数在这里发生了什么

  • 我正在将第一个类扩展到第二个类,我可以使用new SecondClass()访问arg变量。arg,现在如何使用扩展类访问基类中的className变量


  • 1.
    中,您使用
    new
    创建匿名实例,并访问其成员
    className

    2.
    中,您可以在派生类中使用
    super.className

    class SecondClass extends FirstClass{
        public String className="SecondClass";
        public String extend=new FirstClass().className;
    
        public void method() {
            String cn = super.className;
        }
    }
    
    除了这些可能性之外,您正在将OO数据隐藏原理磨碎。
    如果要访问基类成员,请使基类成员受保护或在
    1中创建
    getter/setter
    -方法。

    您正在使用
    new
    创建匿名实例,并访问其成员
    className

    2.
    中,您可以在派生类中使用
    super.className

    class SecondClass extends FirstClass{
        public String className="SecondClass";
        public String extend=new FirstClass().className;
    
        public void method() {
            String cn = super.className;
        }
    }
    
    除了这些可能性之外,您正在将OO数据隐藏原理磨碎。
    如果要访问基类成员,请使基类成员
    受保护
    或创建
    getter/setter
    -methods.

    从外部强制转换到基类以访问字段:

    System.out.println(((FirstClass)new SecondClass()).className);
    

    从外部,可以强制转换为基类型以访问字段:

    System.out.println(((FirstClass)new SecondClass()).className);
    

    你为什么要这样做呢?如果您遵循正常的最佳实践(字段是私有的),那么这并不是一个问题。为什么您要从这开始呢?如果您遵循正常的最佳实践(字段是私有的),那么从一开始就不是问题。