与Interfaces一样,抽象类只有方法签名才能实现吗?如果是的话:
答案 0 :(得分:2)
与Interfaces一样,抽象类只有方法签名才能实现吗?如果是的话:
是的,但也可以实施......
您可以在abstract
类中使用与interfaces
不同的方法实现,但是您无法创建abstract class
的实例
答案 1 :(得分:2)
:
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() {
...
}
}
答案 2 :(得分:2)
与Interfaces一样,抽象类只能使用方法签名而不实现吗?
是即可。抽象类可以有方法实现。
它与Interface的区别?
接口中声明的变量默认为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
答案 3 :(得分:2)
答案 4 :(得分:2)
抽象类可以包含实现,但它不必包含。这是使其与接口不同的一件事。
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
}
答案 5 :(得分:1)
在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());
}
}
答案 6 :(得分:1)
抽象类是无法实例化的类。它位于具体类(完全实现)和接口(完全没有实现)之间。
它可以包含完全实现的常规成员(变量,方法等)。
它还可以包含未实现的抽象成员。任何未实现的成员(例如方法签名)都必须标记为抽象。
所以回答你的问题:
与Interfaces一样,抽象类只有方法签名才能实现吗?
你的措辞不够明确,不能给出是或否答案。抽象类可以实现方法,它可以具有未实现的抽象方法,必须将其标记为abstract
。除非标记为abstract
,否则不能拥有未实施的方法。
如果是:它与界面有什么不同?
因为它允许实现成员。
另一个类(此Abstract类作为基类)如何实现该方法的主体?
只需要实现所有抽象成员。
public abstract class A
{
public abstract void Test();
}
public class B : A
{
public void Test(){ return; }
}
答案 7 :(得分: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
在抽象类中下注,没有必要。请阅读Interface vs Abstract Class
How another class, for which this Abstract Class is acting as a base class, can implement the body of that method?
如果您的BaseClass
是摘要且ChildClass
正在扩展基类,则可以在abstract
中实施ChildClass
方法,否则请ChildClass
abstrac
t还
public class ChildClass extends BaseClass{
void display(){
/// Your Implementation here
}
}
abstract class BaseClass{
abstract void display();
}