首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个拥有全部具体方法的普通类和一个拥有全部具体方法的抽象类有什么区别?

一个拥有全部具体方法的普通类和一个拥有全部具体方法的抽象类有什么区别?
EN

Stack Overflow用户
提问于 2015-09-06 21:03:47
回答 3查看 107关注 0票数 1

假设一个抽象类包含所有三个方法,并且都是具体方法,与之相比,一个普通类包含所有三个方法,也是具体方法。

它们在应用程序中的区别是什么,因为它们现在基本上服务于相同的目的。为什么这是允许的?

以一个抽象类为例,假设:

代码语言:javascript
运行
复制
abstract class A {
    public void open() {} 
    public void close() {} 
    public void pull() {}
}

和一个普通的类:

代码语言:javascript
运行
复制
class A {
    public void open() {} 
    public void close() {} 
    public void pull() {}
}

它们之间的区别是什么,因为如果我们去掉abstract关键字,那么两者是相同的。

有人能解释一下吗?

EN

回答 3

Stack Overflow用户

发布于 2015-09-06 21:09:21

你不能实例化一个抽象类。一个不同之处在于实例化它们的方式:

代码语言:javascript
运行
复制
A a = new A(); // for normal class
A a = new A(){}; // for abstract class with no abstract with no abstract memebers

第二行创建了A的一个无序子类的实例。

票数 1
EN

Stack Overflow用户

发布于 2015-09-06 21:11:44

具体类可以实例化,但抽象类无论如何都不能实例化。编译器并不关心类是否有抽象成员。抽象类不能被实例化!当你用匿名内部类实例化一个没有抽象成员的抽象类时,你不需要花括号中的任何东西。这是因为所有的方法都被实现了。我想这是另一个区别。

票数 1
EN

Stack Overflow用户

发布于 2015-09-06 21:16:06

虽然@Bohemian是正确的,但当extended时,也是一个abstract类,abstract类中的所有abstract方法都必须实现到extend我们的abstract类的类中。例如,这不起作用。

MyClass

代码语言:javascript
运行
复制
public class MyClass extends AbstractClass {

}

AbstractClass

代码语言:javascript
运行
复制
public abstract class AbstractClass {
    public abstract void test();
}

MyClass必须包含AbstractClass类中的所有方法。此外,所有abstract方法都不能有主体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32423883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档