在java中,抽象方法可以是公共的吗?抽象方法是隐式公开的还是如果你没有指定它们是否打包? (常规方法隐式包装正确?)是否有抽象方法不能拥有的可见性修饰符? (私人打扰我有问题)
答案 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关键字,因为抽象方法没有指定主体。