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();
    }
}
为什么输出为5,5?而不是5,11?.该y.display()方法如何工作?
我无法理解以下输出.
我不知道为什么输出是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);
    }
}
为什么这样工作..请解释.
我有以下类,我正在使用它作为我项目中所有模型的基础:
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..
}
我正试图通过以下方式扩展它:
public class User extends BaseModel
{
    static String table = "user";
    //snip
}
但是,如果我尝试执行以下操作:
if ( User.exists( 4 ) )
   //do something
然后,而不是查询:"SELECT id FROM user WHERE id = ?",它产生查询:"SELECT id from null WHERE id =?".因此,类中table字段的覆盖 …
我一直在SCJP学习指南中阅读有关Statics的部分,它提到了以下内容:
静态方法不能被覆盖,但可以重新定义它们
重新定义实际意味着什么?是否存在父和子都存在的静态方法,具有相同的签名,但是它们的类名分别引用它们?如 :
class Parent
{
   static void doSomething(String s){};
}
class Child extends Parent
{
   static void doSomething(String s){};
}
引用为:Parent.doSomething();和Child.doSomething();?
此外,这同样适用于静态变量,还是静态方法?
我在Java中为继承创建了以下难题:
Animal.java
public class Animal {
    private String sound;
    public void roar() {
        System.out.println(sound);
    }
    public void setSound(String sound) {
        this.sound = sound;
    }
}  
Tiger.java
public class Tiger extends Animal {
    public String sound;
    public Tiger() {
        sound = "ROAR";
    }
}
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);
    }
}
输出:
null
null
bla
Hust hust
我猜这种奇怪的行为正在发生,因为sound在动物是私人的,而sound …
自从我在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;
}
为了简短起见,创建一个B实例并调用print()会打印A中设置的"value"的原始值.
我假设不是"这个对象拥有的一个名为'value'的变量的某种通用标识符,"A上定义的函数与"B"具有完全不同的"值"上下文.
还有什么其他方法可以组织某个类的常见变体但是创建一个所述类的孩子?某种工厂对象?它似乎不是接口是答案,因为那时我必须重新定义该类的每个方面,所以我没有做到这一点.
任何帮助将不胜感激,谢谢.
这是一个菜鸟问题,但我无法弄明白.
这是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);
        }
}
这是cow.java
class Cow extends Animal {
    call = "moo";
}
显然,这不会运行.但是我希望能够运行Cow.sound()并将输出读作"moo".我还希望能够使用自己的字符串创建更多覆盖'call'的类.我应该做什么呢?
在其他编程语言方面有 20 年的经验,现在我是 Java 新手,感觉自己像个菜鸟程序员......
我使用Indexable抽象类来扩展我的所有@entity类,因此我不需要将@Id @GeneratedValue @SequenceGenerator它们放在所有类上。我也有Auditable通向@CreatedBy @CreatedDate @ModifiedBy @ModifiedDate这些继承路径的方法:
现在我注意到我的 99% 的实体类还具有:
@Column(nullable = false, unique = true) private String name;
我想将该行移到类中Indexable以避免 99% 中的样板代码,但是没有name字段的两个类是重要的可审计类,我不想将所有祖先字段复制到它们只是为了防止其上出现空名称错误。
问题是:如果我在这两个类上覆盖该字段的注释以使其可为空且瞬态,是否可以避免在表上创建该字段并且不会用空名称打扰用户?
class SomeAuditableClass extends Audited {
  //@override
  @Column(nullable = true) @Transient private String name;
Java中有没有办法重写类变量中的内容?没有多大帮助...
java ×10
inheritance ×5
oop ×2
static ×2
jpa ×1
overriding ×1
protected ×1
scjp ×1
subclass ×1