0

我有一个名为 date 的课程:

public class Date{
    private String monthAndDate;
    public Date(String inputMonthAndDate){
        monthAndDate = inputMonthAndDate;
    }
}

我有另一个班级叫做病人。是否可以从 Date 类中获取 monthAndDate 的语法并将其传递给 Patient 类中的私有字段?

谢谢你。

4

9 回答 9

6

并非没有在您的Date课程中添加吸气剂。这是将字段设为私有的一部分。

于 2012-11-16T17:29:09.350 回答
1

您正试图违反数据封装概念。 private字段/方法只能在类中本地访问,对其他类不可用。

添加访问器方法,例如getMonthAndadte()返回类中的monthAndDateDate

于 2012-11-16T17:30:23.303 回答
1

注意:您应该避免使用标准 JDK 已经使用的名称来命名类。

要回答您的问题,您只需在 Date 类中提供一个吸气剂:

public class Date{
    private String monthAndDate;
    public Date(String inputMonthAndDate){
        monthAndDate = inputMonthAndDate;
    }
    public String getMonthAndDate(){
        return monthAndDate;
    }
}

您现在可以调用:

String s = someDate.getMonthDate();
于 2012-11-16T17:30:37.960 回答
1

您可以通过反射轻松完成此操作,但只有Date在您无法控制、没有合法的 API 来执行此操作且您绝对必须在考虑所有后果后才能使用它时才建议这样做。

于 2012-11-16T17:30:48.643 回答
1

访问您的私有字段的示例场景在此代码中:

public class Date
{
    private String monthAndDate;

    public Date(String inputMonthAndDate)
    {
        monthAndDate = inputMonthAndDate;
    }

    public String getMonthAndDate()
    {
        return monthAndDate;
    }
}

public class Parent
{
   private yetAnotherField;

   Parent()
   {
       this.yetAnotherField = (new Date("some string")).getMonthAndDate();
   }
}
于 2012-11-16T17:30:58.237 回答
1

2种方法来做到这一点:

-在需要访问该字段的类中Getter用于字段monthAndDate和使用原则。Composition

-使用Reflection,这对初学者来说会有点困难。

于 2012-11-16T17:31:31.440 回答
1

不是,private但你考虑过使用“包私有”吗?如果某些东西是“包私有的”,那么它只能被同一个包中的其他类看到。令人困惑的是它没有关键字......它是默认范围。

于 2012-11-16T17:31:42.223 回答
0

您可以使用反射,但提供 getter 方法将是更好的解决方案。

于 2012-11-16T17:32:12.757 回答
0

使用反射:

final Field field = Date.class.getDeclaredField("monthAndDate");
field.setAccessible(true);

final String monthAndDate = (String)field.get(date);

(和

Date date = new Date("anything");

)

于 2012-11-16T17:52:27.923 回答