相关疑难解决方法(0)

为什么我们不应该在java中使用protected static

我正在经历这个问题有没有办法在Java中覆盖类变量? 36条赞成票的第一条评论是:

如果你看过protected static,跑.

任何人都可以解释为什么protected static不赞成?

java oop inheritance static protected

115
推荐指数
5
解决办法
5万
查看次数

实例字段的继承如何在这个特定的代码中工作?

class A
{
    int a = 2, b = 3;
    public void display()
    {
        int c = a + b;
        System.out.println(c);
    }
}
class B extends A
{
    int a = 5, b = 6;
}
class Tester
{
    public static void main(String arr[])
    {
        A x = new A();
        B y = new B();
        x.display();
        y.display();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么输出为5,5?而不是5,11?.该y.display()方法如何工作?

java inheritance

44
推荐指数
6
解决办法
3366
查看次数

Java继承字段

我无法理解以下输出.

我不知道为什么输出是10,我认为该行A a = new B()创建了一个B类的新实例,我认为结果应该是20

class A {
    int i = 10;
}

class B extends A {
    int i = 20;
}

public class MainClass {
    public static void main(String[] args) {
        A a = new B();

        System.out.println(a.i);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这样工作..请解释.

java inheritance

26
推荐指数
3
解决办法
6492
查看次数

Java:覆盖父类的静态变量?

我有以下类,我正在使用它作为我项目中所有模型的基础:

public abstract class BaseModel
{
    static String table;
    static String idField = "id";       

    public static boolean exists(long id) throws Exception
    {
        Db db = Util.getDb();
        Query q = db.query();
        q.select( idField ).whereLong(idField, id).limit(1).get(table);

        return q.hasResults();
    }

    //snip..
}
Run Code Online (Sandbox Code Playgroud)

我正试图通过以下方式扩展它:

public class User extends BaseModel
{
    static String table = "user";
    //snip
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试执行以下操作:

if ( User.exists( 4 ) )
   //do something
Run Code Online (Sandbox Code Playgroud)

然后,而不是查询:"SELECT id FROM user WHERE id = ?",它产生查询:"SELECT id from null WHERE id =?".因此,类中table字段的覆盖 …

java oop static static-members

18
推荐指数
3
解决办法
4万
查看次数

在Java中重新定义静态方法意味着什么?

我一直在SCJP学习指南中阅读有关Statics的部分,它提到了以下内容:

静态方法不能被覆盖,但可以重新定义它们

重新定义实际意味着什么?是否存在父和子都存在的静态方法,具有相同的签名,但是它们的类名分别引用它们?如 :

class Parent
{
   static void doSomething(String s){};
}

class Child extends Parent
{
   static void doSomething(String s){};
}
Run Code Online (Sandbox Code Playgroud)

引用为:Parent.doSomething();Child.doSomething();

此外,这同样适用于静态变量,还是静态方法?

java scjp

12
推荐指数
2
解决办法
2944
查看次数

Java继承之谜

我在Java中为继承创建了以下难题:

Animal.java

public class Animal {
    private String sound;

    public void roar() {
        System.out.println(sound);
    }

    public void setSound(String sound) {
        this.sound = sound;
    }
}  
Run Code Online (Sandbox Code Playgroud)

Tiger.java

public class Tiger extends Animal {
    public String sound;

    public Tiger() {
        sound = "ROAR";
    }
}
Run Code Online (Sandbox Code Playgroud)

Jungle.java

public class Jungle {
    public static void main(String[] args) {
        Tiger diego = new Tiger();

        diego.roar();
        diego.sound = "Hust hust";
        diego.roar();
        diego.setSound("bla");
        diego.roar();
        System.out.println(diego.sound);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

null
null
bla
Hust hust
Run Code Online (Sandbox Code Playgroud)

我猜这种奇怪的行为正在发生,因为sound在动物是私人的,而sound …

java inheritance

8
推荐指数
1
解决办法
1045
查看次数

按另一种字段类型重载Java数据字段类型

是否可以将字段类型重载为另一种字段类型?

如果是这样,是否可以提供一些例子?

java

7
推荐指数
1
解决办法
1050
查看次数

更改子类中的变量值?

自从我在Java上工作以来,已经有一段时间了,而且我在制作任何东西方面的​​经验非常有限,因为我在大多数情况下使用更高级别的指定语言,脚本语言和排序.

我假设我不理解分配类成员默认值的概念.

// parent
public class A {
    protected int value = 0;
    public void print() {
        System.out.println(value);
    }
}

// child class
public class B extends A {
    int value = 1;
}
Run Code Online (Sandbox Code Playgroud)

为了简短起见,创建一个B实例并调用print()会打印A中设置的"value"的原始值.

我假设不是"这个对象拥有的一个名为'value'的变量的某种通用标识符,"A上定义的函数与"B"具有完全不同的"值"上下文.

还有什么其他方法可以组织某个类的常见变体但是创建一个所述类的孩子?某种工厂对象?它似乎不是接口是答案,因为那时我必须重新定义该类的每个方面,所以我没有做到这一点.

任何帮助将不胜感激,谢谢.

java

5
推荐指数
1
解决办法
2580
查看次数

子类java中的"覆盖"超类成员

这是一个菜鸟问题,但我无法弄明白.

这是animal.java.我希望它成为所有动物亚类的超类.它与所有子类位于同一个包中.

public class Animal {
    protected static String call = "Animals make noises, but do not have a default noise, so we're just printing this instead.";
        public static void sound()
        {
            System.out.println(call);
        }
}
Run Code Online (Sandbox Code Playgroud)

这是cow.java

class Cow extends Animal {
    call = "moo";
}
Run Code Online (Sandbox Code Playgroud)

显然,这不会运行.但是我希望能够运行Cow.sound()并将输出读作"moo".我还希望能够使用自己的字符串创建更多覆盖'call'的类.我应该做什么呢?

java overriding subclass

5
推荐指数
1
解决办法
690
查看次数

我可以“覆盖”超类私有字段的注释吗?

在其他编程语言方面有 20 年的经验,现在我是 Java 新手,感觉自己像个菜鸟程序员......

我使用Indexable抽象类来扩展我的所有@entity类,因此我不需要将@Id @GeneratedValue @SequenceGenerator它们放在所有类上。我也有Auditable通向@CreatedBy @CreatedDate @ModifiedBy @ModifiedDate这些继承路径的方法:

  • 大多数实体类 > AuditableClass > IndexableClass;
  • 一些实体类 > 可索引类。

现在我注意到我的 99% 的实体类还具有:

@Column(nullable = false, unique = true) private String name;
Run Code Online (Sandbox Code Playgroud)

我想将该行移到类中Indexable以避免 99% 中的样板代码,但是没有name字段的两个类是重要的可审计类,我不想将所有祖先字段复制到它们只是为了防止其上出现空名称错误。

问题是:如果我在这两个类上覆盖该字段的注释以使其可为空且瞬态,是否可以避免在表上创建该字段并且不会用空名称打扰用户?

class SomeAuditableClass extends Audited {
  //@override
  @Column(nullable = true) @Transient private String name;
Run Code Online (Sandbox Code Playgroud)

Java中有没有办法重写类变量中的内容?没有多大帮助...

java inheritance jpa data-annotations

4
推荐指数
1
解决办法
4056
查看次数