Questions tagged «abstract»

抽象是众多面向对象编程语言共享的关键字。可以将方法和类标记为抽象,以指示它们不包含应用程序逻辑的完整实现,而必须进行扩展。抽象类无法实例化,其目的是为其子类提供统一的接口,以及实现不必为每个子类重新实现的通用方法的实现。


16
我们可以实例化一个抽象类吗?
在我的一次采访中,有人问我“我们是否可以实例化一个抽象类?” 我的回答是“不,我们不能。” 但是,面试官告诉我“错了,我们可以。” 我对此有些争论。然后他告诉我自己在家尝试一下。 abstract class my { public void mymethod() { System.out.print("Abstract"); } } class poly { public static void main(String a[]) { my m = new my() {}; m.mymethod(); } } 在这里,我正在创建类的实例和抽象类的调用方法。有人可以向我解释一下吗?面试中我真的错了吗?
573 java  oop  class  object  abstract 

12
是否可以在Python中创建抽象类?
如何在Python中使类或方法抽象? 我尝试__new__()像这样重新定义: class F: def __new__(cls): raise Exception("Unable to create an instance of abstract class %s" %cls) 但是现在,如果我创建一个像这样G继承的F类: class G(F): pass 那么我也无法实例化G,因为它调用了其超类的__new__方法。 有没有更好的方法来定义抽象类?

9
Java抽象接口
考虑一个示例(在Java中编译) public abstract interface Interface { public void interfacing(); public abstract boolean interfacing(boolean really); } 为什么必须将接口“声明”为抽象的?还有其他适用于抽象接口的规则吗? 最后:如果abstract过时,为什么将它包含在Java中?有抽象接口的历史吗?
197 java  interface  abstract 

3
如何通过反射确定Java类是否抽象
我正在遍历Jar文件中的类,希望找到那些不是抽象的类。我可以通过实例化类并捕获InstantiationException来解决此问题,但是由于某些类的启动量很大,因此性能受到了影响。我在Class.java文档中找不到明显类似于isAbstract()的东西。
183 java  class  abstract 

8
在Kotlin中扩展数据类
数据类似乎可以替代Java中的老式POJO。这些类将允许继承是非常可预期的,但是我看不到扩展数据类的便捷方法。我需要的是这样的: open data class Resource (var id: Long = 0, var location: String = "") data class Book (var isbn: String) : Resource() 上面的代码由于component1()方法冲突而失败。data仅将注释留在一个类中也不起作用。 也许还有另一个习惯来扩展数据类? UPD:我可能仅注释子子类,但data注释仅处理构造函数中声明的属性。也就是说,我必须声明所有父项的属性open并覆盖它们,这很丑陋: open class Resource (open var id: Long = 0, open var location: String = "") data class Book ( override var id: Long = …

4
为什么有人将Java接口方法声明为抽象方法?
今天,我使用了Eclipse的“拉接口”重构功能来基于现有类创建一个接口。该对话框提供了将新界面的所有新方法创建为“抽象”方法的功能。 这样做的好处是什么? 我认为,允许您将接口方法声明为抽象的事实是该语言的多余且无害的功能,因此不建议特别提倡。 为什么Eclipse支持这种样式,或者为什么有人自愿选择支持这种样式? 澄清:我不是在问为什么接口方法是抽象的,这是显而易见的。我想问为什么人们会明确选择将它们标记为抽象,因为如果它们在接口中,它们无论如何都是抽象的。

8
为什么PHP 5.2+不允许抽象静态类方法?
在PHP 5.2中启用严格警告之后,我看到了一个项目中的大量严格标准警告,这些项目最初编写时没有严格警告: 严格标准:静态函数 Program :: getSelectSQL()在Program.class.inc中不应抽象 有问题的函数属于抽象父类Program,并且被声明为抽象静态,因为它应在其子类(例如TVProgram)中实现。 我确实在这里找到了对此更改的引用: 删除了抽象静态类函数。由于疏忽大意,PHP 5.0.x和5.1.x允许在类中使用抽象静态函数。从PHP 5.2.x开始,只有接口可以拥有它们。 我的问题是:有人可以清楚地解释为什么PHP中不应该有一个抽象的静态函数吗?
121 php  oop  static  abstract 



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 注意,该方法virtual final在IL中声明。

5
为什么不抽象字段?
为什么Java类不能像抽象类那样具有抽象字段? 例如:我有两个扩展同一个抽象基类的类。这两个类各自具有相同的方法,但其中包含String常数(恰好是错误消息)。如果字段可以是抽象的,那么我可以使这个常量抽象,并将该方法引入基类。相反,我必须创建一个抽象方法(getErrMsg()在这种情况下称为该方法),该方法返回String,在两个派生类中重写此方法,然后可以拉出该方法(现在称为抽象方法)。 为什么我不能仅将字段抽象化?Java是否可以设计成允许这样做?
99 java  methods  field  abstract 


7
抽象属性(不是属性)?
定义抽象实例属性而不是属性的最佳实践是什么? 我想写一些像: class AbstractFoo(metaclass=ABCMeta): @property @abstractmethod def bar(self): pass class Foo(AbstractFoo): def __init__(self): self.bar = 3 代替: class Foo(AbstractFoo): def __init__(self): self._bar = 3 @property def bar(self): return self._bar @bar.setter def setbar(self, bar): self._bar = bar @bar.deleter def delbar(self): del self._bar 属性很方便,但是对于不需要计算的简单属性来说,它们是过大的。这对于将由用户进行子类化和实现的抽象类尤为重要(我不想强迫某人@property只可以在中编写代码self.foo = foo就使用__init__)。 Python问题中的抽象属性仅建议使用@property和的答案@abstractmethod:它不能回答我的问题。 通过抽象类属性的ActiveState配方AbstractAttribute可能是正确的方法,但是我不确定。它也仅适用于类属性,而不适用于实例属性。
78 python  abstract 

7
Java 8中“功能接口”的精确定义
最近,我开始探索Java 8,但我不太了解Java的lambda表达式实现所必需的“功能接口”的概念。Java中有关于lambda函数的相当全面的指南,但是我陷入了为功能接口的概念定义的章节中。定义如下: 更准确地说,功能接口定义为具有一种抽象方法的任何接口。 然后他继续进行示例,其中一个是Comparator接口: public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); } 我能够测试是否可以使用lambda函数代替Comparator参数,并且它可以工作(即Collections.sort(list, (a, b) -> a-b))。 但是在Comparator界面中,compare和equals方法都是抽象的,这意味着它具有两个抽象方法。那么,如果定义要求一个接口仅具有一个抽象方法,那么这将如何工作?我在这里想念什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.