-3

像接口一样,抽象类可以只有方法签名而没有实现吗?如是:

  1. 抽象类与接口有何不同?
  2. 另一个以抽象类为基类的类如何实现基类方法的主体?
4

8 回答 8

3

抽象类可以包含实现,但不是必须的。这是使它与接口不同的一件事。

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
}
于 2012-07-04T06:58:48.530 回答
2

像接口一样,抽象类可以只有方法签名而没有实现吗?如是:

是的,但也可以实现......

你也可以在abstract类中实现方法interfaces,但你不能创建一个实例abstract class

接口和抽象类

抽象类与接口

于 2012-07-04T06:37:01.993 回答
2

在 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() {
    ...
  }
}
于 2012-07-04T06:42:08.967 回答
2

像接口一样,抽象类可以只有方法签名而没有实现吗?

的。抽象类可以有方法实现。

它与接口有何不同?

接口中声明的变量默认是 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

于 2012-07-04T06:48:29.483 回答
2
  1. 接口是一个完全抽象的类,
    仅表示签名,没有实现,没有数据成员。
    另一方面,定义的抽象类至少需要一个抽象方法。
    它也可以有实现。它还可以包含将继承给其继承者的数据成员。
  2. 继承者需要实现具有相同签名的抽象方法才能实现
于 2012-07-04T06:58:10.513 回答
1

在 JAVA 中是的,

  1. 如果你这样使用抽象类,那么接口和抽象类之间没有区别。抽象类真正重要的是您可以提供期望被子类继承的通用实现,这是接口无法做到的。

  2. 是的,正如我所说,抽象类的行为方式与接口相同,您可以重写子类中的方法

例如:

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

}

于 2012-07-04T06:51:08.093 回答
1

抽象类是不能实例化的类。它介于一个具体的类(完全实现)和一个接口(完全没有实现)之间。

它可以包含完全实现的常规成员(变量、方法等)。

它还可以包含未实现的抽象成员。任何未实现的成员,例如方法签名,都必须标记为抽象。

所以回答你的问题:

像接口一样,抽象类可以只有方法签名而没有实现吗?

您的措辞不够清楚,无法给出是或否的答案。抽象类可以有实现的方法,也可以有未实现的抽象方法,必须标记为abstract. 它不能有没有实现的方法,除非它们被标记abstract

如果是:它与接口有何不同?

因为它允许执行成员。

这个抽象类作为基类的另一个类如何实现该方法的主体?

只需要实现所有抽象成员。

public abstract class A
{ 
    public abstract void Test();
}

public class B : A
{
    public void Test(){ return; }
}
于 2012-07-04T06:59:51.790 回答
1

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 abstract 。

public class ChildClass extends BaseClass{

void display(){

    /// Your Implementation here
}

}

abstract class BaseClass{

abstract void display();
}
于 2012-07-04T07:03:34.100 回答