日期:2014-05-20  浏览次数:20647 次

请教关于抽象类的两个问题
请教关于抽象类的两个问题:
1.抽象类中的非抽象方法可以调用抽象方法吗?例如:下面的非抽象方法method2()可以调用抽象方法method1()吗,而且method2()不用声明为abstract。我看到有人这样用,可以运行的。

abstract class ClassOne{
    //......    
    public abstract void method1();
    void method2(){ //注意该方法没有声明为abstract,可以吗?
        method1();
    }


2.从上面的抽象类ClassOne继承一个具体类ClassTwo,自然ClassTwo就有了method1和method2,具体化method1后,接着使用method2,此时method2是调用哪个版本的method1?我觉得应该是ClassTwo类里面这个版本的,对吗?

class ClassTwo extends ClassOne{
    //......    
    public void method1(){
        //balabala...实现方法。
    }
    method2();//其中调用哪个版本的method1()?

------解决方案--------------------
1, 可以。
2,method1就一个版本好不好?
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

1, 可以。
2,method1就一个版本好不好?

method1()应该是两个版本吧?父类一个,子类一个.


父类那个不算,没有实现怎么调用?

那您帮我解释一下什么时候有两个版本?是不是要当父类声明为private,并是个已经实现的方法,子类重新定义一个相同签名的方法的时候,才是两个版本,要调用父类的时候要用super。

不能是private,除了private都可以,一旦什么private,对子类不可见了,自然不能用super