这让我困扰了很长时间,所以我想我会继续问问.
如果我写
import java.util.*;
import java.lang.*;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
new Shape();
new Triangle();
}
public static class Shape
{
static String name = "shape";
Shape()
{
printName();
}
public void printName()
{
System.out.println( name() );
}
public String name()
{
return name;
}
}
public static class Triangle extends Shape
{
static String name = "triangle";
public String name()
{
return name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么输出就是
shape
triangle
Run Code Online (Sandbox Code Playgroud)
但如果我写
import java.util.*;
import java.lang.*;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
new Shape();
new Triangle();
}
public static class Shape
{
static String name = "shape";
Shape()
{
printName();
}
public void printName()
{
System.out.println( name );
}
}
public static class Triangle extends Shape
{
static String name = "triangle";
}
}
Run Code Online (Sandbox Code Playgroud)
那么输出就是
shape
shape
Run Code Online (Sandbox Code Playgroud)
在第一个版本中,我必须将相同的函数getName()一遍又一遍地复制/粘贴到每个子类中.必须有一个更好的方法.在第二个例子中我需要改变什么?
父类不能访问静态字段.类Shape不会"看到" name类Triangle的静态字段并使用自己的静态字段name.
UPD:你问:你需要在第二个例子中改变什么?更具体地说,您的第一个示例是正确"修复"您的第二个示例.唯一正确的方法是使用一些像你的name()方法一样的getter 方法.
UPD2 :(来自我的评论):嗯,另一种方式:原谅任何一种领域name.使用相反的方法调用name()(非静态!),它将在每个类中返回所需的名称.只是return "shape";或return "triangle"在其中.
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |