java - 如果匿名类数据成员没有在父类中声明,我们是否不能访问它们?

标签 java oop anonymous-class

class Parent{
  String h;
  Parent(String s){
    h = s;
  }
}
public class Child{ 
public static void main(String args[]){
   Parent p = new Parent("fcghj"){          // anonymous class
            private int y = 9;
  };
  System.out.println(p.h);
  System.out.println(p.y);              // error
}
}

错误显示:在父级中找不到符号 y

如果没有在父类中声明y,有没有办法在匿名类之外访问y?

我们是否只能为了在匿名类中重载、隐藏和重写而声明Parent类中存在的字段和方法?

最佳答案

匿名代码如果未分配,则保持匿名,也将其视为简单 block ,至于初始化 block ,您不希望在外部获取值:

public class Child { 

  {          // initialize block
            int y = 9;
  }
public static void main(String args[]){
   Parent p = new Parent("fcghj");
  System.out.println(p.h);
  System.out.println(y);              // error
}

您可以更改/添加带有 int 参数的父构造函数以便稍后使用它

class Parent{
  String h;
  int y;
  Parent(String s, int y){
    h = s;
    this.y = y;
  }

关于java - 如果匿名类数据成员没有在父类中声明,我们是否不能访问它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53141504/

相关文章:

java - HQL:如何根据映射复合元素的属性对对象列表进行排序

Java:使用字符串 charAt 方法的 for 循环崩溃

c++ - 难以结合 GP 和 OOP 概念

java - 如何更改匿名类中的实例变量

java - 匿名接口(interface)实现

Java:匿名类的初始化和构造函数

java - 线程安全的 CopyOnWriteArrayList 反向迭代

java - 如何在按下按钮时销毁Java中的CountdownTimer?

iphone - 私有(private)合成属性(property)是矛盾的吗?

java - 领域对象和这些对象的容器的类设计