【问题标题】:java inheritance misunderstandingjava继承的误区
【发布时间】:2014-03-30 17:12:24
【问题描述】:

第一个问题在代码里面。第二个问题是为什么不能将静态方法重写为非静态方法?三是为什么static和abstract不能并存?

class A {  
    public void display() {  
        System.out.println("Display of Class A called");  
    }  
}  

class B extends A {  
    public void display() {  
        System.out.println("Display of Class B called");  
    }  
}  

class C extends B {  
    public void display() {  
        System.out.println("Display of Class C called");  
        super.display(); // calls B's Display  
        // Is there a way to call A's display() from here? 
    }  
}

【问题讨论】:

  • 想想static 的含义——它并不特定于任何特定的实例。现在想想多态是如何工作的:使用的实现取决于调用方法的instance。看看他们是如何不真正一起工作的?至于另一个问题,不,你不能。见stackoverflow.com/questions/586363
  • 另外,请一次只问一个问题

标签: java multiple-inheritance


【解决方案1】:

[B] //有没有办法从这里调用A的Display???[/B]

不,您不能在类层次结构中上两级。您可以在B 中实现并调用一个方法,该方法将调用A 实现。

为什么static 方法不能被覆盖为非static 方法

static 方法与一个类相关联。多态性(因此覆盖)是一个适用于对象的概念,因此不适用于它们。

为什么staticabstract不能一起去

出于与上述相同的原因。 abstract 方法是应该在子类中实现的方法,因为子类继承了它。由于子类不继承static方法,所以static方法不能是abstract

【讨论】:

    【解决方案2】:

    第一个问题:不,你不能直接调用低音类的低音类,因为在 C 类看来,它不知道 B 类有一个低音类,它是 A 类。C 只知道它有一个基类,它是 B。

    第二个问题:静态方法只是组织全局方法的一种简洁方式。没有继承。您只需将该方法放到一个类中,这样当您编写代码来调用它时,您就知道在哪里找到它。

    第三个问题:abstract 的意思是“这是类要做的事情,这里有一些基本功能,但我无法完成这个;继承我并完成剩下的工作以使其正常工作” .如前所述,静态方法只是一种“独立”放置方法的方式,不需要初始化,也不需要上下文。两者不相配。

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 2012-10-30
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2014-09-15
      相关资源
      最近更新 更多