标签: abstract

抽象函数和虚函数有什么区别?

抽象函数和虚函数有什么区别?在哪些情况下建议使用虚拟或抽象?哪一个是最好的方法?

oop programming-languages virtual-functions abstract

1526
推荐指数
11
解决办法
58万
查看次数

访谈:我们可以实例化抽象类吗?

采访者问:我们可以实例化一个抽象类吗?我说,不,他告诉我 - 错,我们可以.

我对此有点争论.然后他告诉我自己在家里试试.

abstract class my {
    public void mymethod() {
        System.out.print("Abstract");
    }
}

class poly {
    public static void main(String a[]) {
        my m = new my() {};
        m.mymethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我正在创建我的类的实例并调用抽象类的方法.有人可以向我解释一下吗?在我的采访中我真的错了吗?

java oop class object abstract

561
推荐指数
10
解决办法
23万
查看次数

是否可以在Python中创建抽象类?

如何在Python中创建类或方法摘要?

我试着__new__()像这样重新定义:

class F:
    def __new__(cls):
        raise Exception("Unable to create an instance of abstract class %s" %cls)
Run Code Online (Sandbox Code Playgroud)

但是现在如果我创建一个G继承自F这样的类:

class G(F):
    pass
Run Code Online (Sandbox Code Playgroud)

然后我也无法实例化G,因为它调用了它的超类__new__方法.

有没有更好的方法来定义抽象类?

python inheritance abstract-class class abstract

268
推荐指数
6
解决办法
17万
查看次数

Python中的抽象方法

我在使用Python继承时遇到了麻烦.虽然这个概念在Java中对我来说似乎太容易了但到目前为止我一直无法理解Python,至少对我来说这是令人惊讶的.

我有一个原型如下:

class Shape():
   def __init__(self, shape_name):
       self.shape = shape_name

class Rectangle(Shape):
   def __init__(self, name):
       self.shape = name
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我如何制作一个需要为所有子类实现的抽象方法?

python inheritance abstract

212
推荐指数
6
解决办法
19万
查看次数

Java抽象接口

考虑一个例子(在java中编译)

public abstract interface Interface {
    public void interfacing();
    public abstract boolean interfacing(boolean really);
}
Run Code Online (Sandbox Code Playgroud)

为什么接口被"声明"抽象是必要的?是否有适用于抽象接口的其他规则?


最后:如果abstract已经过时,为什么它包含在Java中?抽象界面有历史吗?

java interface abstract

194
推荐指数
4
解决办法
10万
查看次数

如何通过反射确定Java类是否是抽象的

我正在通过Jar文件中的类进行交互,并希望找到那些不是抽象的.我可以通过实例化类和捕获InstantiationException来解决这个问题,但由于某些类具有大量启动,因此性能受到影响.我在Class.java文档中找不到任何明显像isAbstract()的东西.

java class abstract

177
推荐指数
2
解决办法
5万
查看次数

为什么将Java接口方法声明为抽象?

我今天使用Eclipse的"拉接口"重构功能来创建基于现有类的接口.提供的对话框用于创建新接口的所有新方法作为"抽象"方法.

那有什么好处?

我认为你被允许将接口方法声明为抽象的这一事实是该语言的一个多余且无害的特性,并不特别鼓励.

为什么Eclipse会支持这样的风格,或者为什么有人会自愿选择这样做呢?

澄清:我不是在问为什么界面方法是抽象的,这很明显.我在问为什么会明确地选择将它们标记为抽象,因为如果它们在界面中它们仍然是抽象的.

java eclipse interface abstract

142
推荐指数
4
解决办法
5万
查看次数

扩展Kotlin中的数据类

数据类似乎是Java中旧式POJO的替代品.很可能这些类允许继承,但我看不到扩展数据类的方便方法.我需要的是这样的:

open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
Run Code Online (Sandbox Code Playgroud)

由于component1()方法的冲突,上面的代码失败了.data仅在一个类中留下注释也不起作用.

也许还有另一个成语来扩展数据类?

UPD:我可能只注释子子类,但data注释只处理构造函数中声明的属性.也就是说,我必须声明所有父级的属性open并覆盖它们,这很难看:

open class Resource (open var id: Long = 0, open var location: String = "")
data class Book (
    override var id: Long = 0,
    override var location: String = "",
    var isbn: String
) : Resource()
Run Code Online (Sandbox Code Playgroud)

inheritance android abstract kotlin data-class

141
推荐指数
7
解决办法
5万
查看次数

为什么PHP 5.2+禁止抽象静态类方法?

在PHP 5.2中启用严格警告后,我看到一个项目的严格标准警告,这些警告最初是在没有严格警告的情况下编写的:

严格标准:静态函数 Program :: getSelectSQL()在Program.class.inc中不应该是抽象

有问题的函数属于抽象父类Program,并被声明为abstract static,因为它应该在其子类中实现,例如TVProgram.

我确实在这里找到了对此更改的引用:

删除了抽象的静态类函数.由于疏忽,PHP 5.0.x和5.1.x允许在类中使用抽象静态函数.从PHP 5.2.x开始,只有接口才能拥有它们.

我的问题是:有人可以清楚地解释为什么在PHP中不应该有一个抽象的静态函数?

php oop static abstract

120
推荐指数
4
解决办法
6万
查看次数

为什么C#接口方法没有声明为抽象或虚拟?

接口中的C#方法在不使用virtual关键字的情况下声明,并在派生类中重写而不使用override关键字.

是否有一个原因?我认为它只是一种语言方便,显然CLR知道如何处理这个问题(默认情况下方法不是虚拟的),但还有其他技术原因吗?

以下是派生类生成的IL:

class Example : IDisposable {
    public void Dispose() { }
}

.method public hidebysig newslot virtual final 
        instance void  Dispose() cil managed
{
  // Code size       2 (0x2)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ret
} // end of method Example::Dispose
Run Code Online (Sandbox Code Playgroud)

请注意,该方法virtual final在IL中声明.

c# methods virtual-functions interface abstract

106
推荐指数
3
解决办法
7万
查看次数