像接口一样,抽象类可以只有方法签名而没有实现吗?如是:
- 抽象类与接口有何不同?
- 另一个以抽象类为基类的类如何实现基类方法的主体?
抽象类可以包含实现,但不是必须的。这是使它与接口不同的一件事。
abstract class classA
{
abstract public void MethodA();
public void MethodB()
{
Console.WriteLine("This is MethodB inside ClassA");
}
}
class classB : classA
{
public override void MethodA()
{
Console.WriteLine("This is MethodA inside class B");
}
}
如果您在抽象基类中实现了一个方法,并且希望以后能够覆盖它,则需要将该方法声明为虚拟的。
virtual protected void MethodC(){
//this can be overridden
}
在 Java 中:
q1:抽象类可以包含方法定义和普通方法,而接口不能。
q2:来自http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
//this is the abstract class
public abstract class GraphicObject {
abstract void draw();
}
//this is the implementation
class Rectangle extends GraphicObject {
void draw() {
...
}
}
像接口一样,抽象类可以只有方法签名而没有实现吗?
是的。抽象类可以有方法实现。
它与接口有何不同?
接口中声明的变量默认是 final 的。抽象类可能包含非最终变量。
默认情况下,接口的成员是公共的。抽象类可以具有类成员的常见风格,如私有、受保护等。
接口是绝对抽象的,不能实例化;抽象类也不能被实例化,但可以在 main() 存在时调用。
与抽象类相比,接口很慢,因为它需要额外的间接性。
请参考以下链接:
http://forums.asp.net/t/1240708.aspx/1
http://java.sys-con.com/node/36250
http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface
在 JAVA 中是的,
如果你这样使用抽象类,那么接口和抽象类之间没有区别。抽象类真正重要的是您可以提供期望被子类继承的通用实现,这是接口无法做到的。
是的,正如我所说,抽象类的行为方式与接口相同,您可以重写子类中的方法
例如:
public abstract class AbstractClassWithoutImplementation {
public abstract String methodA();
}
public class Implementation extends AbstractClassWithoutImplementation {
@Override
public String methodA() {
// TODO Auto-generated method stub
return "Yes";
}
public static void main(String[] args){
Implementation im = new Implementation();
System.out.println(im.methodA());
}
}
抽象类是不能实例化的类。它介于一个具体的类(完全实现)和一个接口(完全没有实现)之间。
它可以包含完全实现的常规成员(变量、方法等)。
它还可以包含未实现的抽象成员。任何未实现的成员,例如方法签名,都必须标记为抽象。
所以回答你的问题:
像接口一样,抽象类可以只有方法签名而没有实现吗?
您的措辞不够清楚,无法给出是或否的答案。抽象类可以有实现的方法,也可以有未实现的抽象方法,必须标记为abstract
. 它不能有没有实现的方法,除非它们被标记abstract
。
如果是:它与接口有何不同?
因为它允许执行成员。
这个抽象类作为基类的另一个类如何实现该方法的主体?
只需要实现所有抽象成员。
public abstract class A
{
public abstract void Test();
}
public class B : A
{
public void Test(){ return; }
}
Like Interfaces, can an abstract class have only method signature without implementation? If yes:
是的,一个abstract
类可以有所有abstract
方法,即使它必须有一个抽象方法abstract
。你可以声明一个类,abstract
即使它没有任何abstract
方法。
How it differs from Interface?
在接口中,所有方法都abstract public
押在抽象类中,没有必要。请阅读接口与抽象类
How another class, for which this Abstract Class is acting as a base class, can implement the body of that method?
如果您BaseClass
是 Abstract 并且ChildClass
正在扩展 Base 类,则您也可以实现abstract
方法 inChildClass
否则 make ChildClass
abstrac
t 。
public class ChildClass extends BaseClass{
void display(){
/// Your Implementation here
}
}
abstract class BaseClass{
abstract void display();
}