习惯于Python中老式的鸭子打字方式,我不了解ABC(抽象基类)的必要性。 帮助是很好的如何使用它们。 我尝试阅读PEP中的理论基础,但是它已经超出了我的头脑。 如果我正在寻找一个可变序列容器,我会检查__setitem__ ,或者更可能尝试使用它( EAFP )。 我还没有遇到过使用ABC的数字模块的实际用途,但是这是我最需要理解的。 任何人都可以向我解释理由吗?
我正在创build一个抽象类。 我希望我的每个派生类都被迫实现特定的构造函数签名。 因此,我做了我想要强迫他们实施的方法,我做了一个抽象的方法。 public abstract class A { abstract A(int a, int b); } 不过,我收到一条消息,指出抽象修饰符在这个项目上是无效的。 我的目标是强制这样的代码。 public class B : A { public B(int a, int b) : base(a, b) { //Some other awesome code. } } 这是所有的C#.NET代码。 谁能帮我吗? 更新1 我想添加一些东西。 结果是这个。 private A() { } protected A(int a, int b) { //Code } 这就是一些人所说的,默认是私有的,而类需要实现一个构造函数。 […]
在使用抽象类来实现一个接口时,Java中会出现一个奇怪的事情:一些接口的方法可能完全丢失(即,既没有抽象声明也没有实际的实现),但是编译器不会抱怨。 例如,给定接口: public interface IAnything { void m1(); void m2(); void m3(); } 下面的抽象类快速编译没有警告或错误: public abstract class AbstractThing implements IAnything { public void m1() {} public void m3() {} } 你能解释一下为什么?
我是使用JUnit进行Javatesting的新手。 我必须使用Java,我想使用unit testing。 我的问题是:我有一个抽象的类与一些抽象的方法。 但是有些方法不是抽象的。 我如何用JUnittesting这个类? 示例代码(非常简单): abstract class Car { public Car(int speed, int fuel) { this.speed = speed; this.fuel = fuel; } private int speed; private int fuel; abstract void drive(); public int getSpeed() { return this.speed; } public int getFuel() { return this.fuel; } } 我想testinggetSpeed()和getFuel()函数。 对这个问题类似的问题在这里 ,但它不使用JUnit。 在JUnit FAQ部分,我find了这个链接 ,但我不明白作者想要用这个例子说什么。 这一行代码是什么意思? […]
我知道ruby中没有抽象类的概念。 但是,如果一切都需要执行,怎么去做呢? 我尝试了一些… class A def self.new raise 'Doh! You are trying to write Java in Ruby!' end end class B < A … … end 但是当我尝试实例化B时,它将在内部打电话给A.new ,这将引发exception。 而且,模块不能被实例化,但是它们也不能被inheritance。 使新的方法私人也将无法正常工作。 任何指针?
在C#中花了相当长的时间开发之后,我注意到如果为了将其用作接口而声明抽象类,则不能实例化此抽象类的向量来存储子类的实例。 #pragma once #include <iostream> #include <vector> using namespace std; class IFunnyInterface { public: virtual void IamFunny() = 0; }; class FunnyImpl: IFunnyInterface { public: virtual void IamFunny() { cout << "<INSERT JOKE HERE>"; } }; class FunnyContainer { private: std::vector <IFunnyInterface> funnyItems; }; 在MS VS2005中声明抽象类向量的行会导致这个错误: error C2259: 'IFunnyInterface' : cannot instantiate abstract class 我看到一个明显的解决方法,即用下面的代替IFunnyInterface: […]
最近我决定去看看Java,所以我还是很新的,也是面向对象编程的方法,所以我想在学习更多东西之前先弄清楚一些事情(我想这是不会很快开始的好的做法)。 我现在编程一个小2D游戏,但我认为我的问题适用于任何非平凡的项目。 为了简单,我会提供我的游戏的例子。 我有不同种类的僵尸,但他们都具有相同的属性(x,y,健康,攻击等),所以我写了一个界面僵尸,由WalkingZombie,RunningZombie TeleportingZombie等执行。这是最好的事情吗? 我更喜欢抽象类吗? 或者与一个超级class ? (我不打算部分实现函数 – 因此我select了一个接口而不是抽象类 ) 我有一个类描述主angular(幸存者),因为它是相当大的我想写一个接口与不同的function,以便我可以很容易地看到和分享它的结构。 这是好的做法吗? 还是只是浪费空间和时间? 我希望这个问题不会被认为是主观的,因为我认为有经验的程序员不会对这种话题持不同意见,因为接口/超类/抽象类的使用遵循逻辑规则,因此不是简单的个人select。
这里是关于抽象类的MSDN文章,但我真的不明白… 我应该什么时候真正使用抽象类? 使用抽象类有什么好处?
在我的一个采访中,我被要求解释一个接口和一个抽象类的区别。 这是我的回应: Java接口的方法是隐式抽象的,不能有实现。 Java抽象类可以有实现默认行为的实例方法。 在Java接口中声明的variables在默认情况下是final的。 抽象类可能包含非最终variables。 Java接口的成员默认是公共的。 一个Java抽象类可以拥有像private,protected等类成员的通常风味。 Java接口应该使用关键字“implements”来实现; Java抽象类应该使用关键字“extends”进行扩展。 一个接口只能扩展另一个Java接口,一个抽象类可以扩展另一个Java类并实现多个Java接口。 一个Java类可以实现多个接口,但它只能扩展一个抽象类。 不过,面试官不满意,告诉我这个描述代表“ 书本知识 ”。 他问我一个更实际的回答,解释什么时候我会通过一个接口select一个抽象类,用实际的例子 。 我哪里做错了?
我想testing一个抽象类。 当然,我可以手动编写一个从类inheritance的模拟 。 我可以使用模拟框架(我正在使用Mockito)而不是手工制作模拟器吗? 怎么样?