在java中,抽象方法可以是公共的吗?

时间:2011-05-15 03:38:41

标签: java

在java中,抽象方法可以是公共的吗?抽象方法是隐式公开的还是如果你没有指定它们是否打包? (常规方法隐式包装正确?)是否有抽象方法不能拥有的可见性修饰符? (私人打扰我有问题)

5 个答案:

答案 0 :(得分:15)

abstract方法与普通方法具有相同的可见性规则,但它们不能是private

答案 1 :(得分:7)

你为什么不试试呢?

abstract class A { 
  private   abstract void pri ();
  protected abstract void pro ();
        abstract void pa ();
  public    abstract void pu ();
}

javac A.java 
A.java:2: illegal combination of modifiers: abstract and private
  private   abstract void pri ();
                          ^
1 error

a)是的,私有抽象方法是无用的,并且使整个类无用。

abstract class B { 
//  private abstract void pri ();
  protected abstract void pro ();
        abstract void pa ();
  public    abstract void pu ();
}

public class A extends B {
  protected void pro () {} ;
            void pa () {} ;
  public    void pu () {} ;
}

其他访问修改关键字都被接受。

答案 2 :(得分:1)

默认和受保护级别的可见性也可用。

答案 3 :(得分:0)

如果子类位于不同的包中,抽象方法的默认可访问性也可能会有问题,因为具有默认可访问性的成员只能由同一包中的类访问。

如果您无法访问继承的抽象类,则无法覆盖它。示例如下。

package PackA;
abstract public class SupClassA
{
    protected abstract void pro();
    abstract void pa();
}

package PackB;
import PackA.*;
class SubclassB extends SupClassA
{
    protected void pro()
    {
        System.out.print("This is implementation of Pro method");
    }   
    void pa()
    {
            System.out.print("This is implementation of Pa method");
    }
}

编译时,编译器会抱怨它不能覆盖方法pa,即使提供了实现。(当pa()方法在两个类中声明为受保护时工作)

E:\VrushProgs>javac -d . PackA\SupClassA.java

E:\VrushProgs>javac -d . PackB\SubClassB.java

PackB\SubClassB.java:3: error: SubclassB is not abstract and does not    
override abstract method pa() in SupClassA
class SubclassB extends SupClassA
^
1 error

答案 4 :(得分:-1)

仅限public& abstract允许与方法结合使用。

示例:

public abstract void sum();

我们在方法上使用abstract关键字,因为抽象方法没有指定主体。