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

在java中,抽象方法可以是公共方法以外的任何方法吗?,java,Java,在java中,抽象方法可以是公共方法以外的任何方法吗?抽象方法是隐式公开的还是在未指定的情况下打包的?(常规方法是隐式打包的,对吗?)?(private给我的印象是有问题的)abstract方法与普通方法具有相同的可见性规则,只是它们不能是private为什么不测试一下呢 abstract class A { private abstract void pri (); protected abstract void pro (); abstract void pa

在java中,抽象方法可以是公共方法以外的任何方法吗?抽象方法是隐式公开的还是在未指定的情况下打包的?(常规方法是隐式打包的,对吗?)?(private给我的印象是有问题的)

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

为什么不测试一下呢

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 () {} ;
}

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

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

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

若你们不能访问继承的抽象类,你们就不能重写它。示例如下

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()方法在两个类中都声明为受保护时有效)


只有
public
abstract
才允许与方法组合使用

例如:

public abstract void sum();

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

这确实回答了关于它们被私有化的问题。我被否决了,因为一个简单的谷歌搜索发现了无数Java抽象方法的定义以及修饰符的作用。这个地方不应该成为网络上或Oracle网站上大量Java文档的懒散替代品,这听起来像是一个需要在meta上讨论的问题,而不是我的问题。-1问一个问题,你可以通过编译器自己检查。它们也可以被保护或包私有。
public abstract void sum();