我可以在不添加抽象方法的情况下定义抽象类吗?
是否可以在JavaScript中模拟抽象基类?最优雅的方式是什么?
说,我想做一些事情: -
var cat = new Animal('cat');
var dog = new Animal('dog');
cat.say();
dog.say();
Run Code Online (Sandbox Code Playgroud)
应输出:'bark','meow'
为什么Java类不能像抽象方法一样具有抽象字段?
例如:我有两个扩展相同抽象基类的类.这两个类每个都有一个相同的方法,除了一个String常量,它常常是一个错误消息.如果字段可以是抽象的,我可以使这个常量抽象,并将方法拉入基类.相反,我必须创建一个抽象方法,getErrMsg()在这种情况下调用,返回String,在两个派生类中重写此方法,然后我可以拉出方法(现在调用抽象方法).
为什么我不能开始抽象领域?Java可以设计为允许这样吗?
是否有一种在Swift中制作"纯虚函数"的标准方法,即.一个必须被每个子类覆盖的,如果不是,会导致编译时错误?
我今天正试图用ui-router来试图更好地理解Ionic中的脚手架,我注意到的一件事是他们给了抽象状态的"标签"一个网址.
我曾经使用抽象状态的唯一一次,我使用空字符串作为url,我注意到如果我偶然尝试导航到抽象状态(而不是子状态),我会得到错误:
无法过渡到抽象状态'[insertAbstractStateHere]'
编辑:
"而且,在实验中,当我尝试将一个网址分配给我的抽象状态(离开Ionic)并仍然呈现嵌套状态视图时,我得到一个大鹅蛋.根本没有任何东西出现."
上面引用的陈述是假的!我在Plunker再试一次,嵌套状态确实出现了.
angular.module('routingExperiments', ['ui.router'])
.config(function($urlRouterProvider, $stateProvider) {
$stateProvider
.state('abstractExperiment', {
abstract: true,
url: '', //<--- seems as if any string can go here.
templateUrl: 'abstractExperiment.html'
})
.state('abstractExperiment.test1', {
url: '/test1',
templateUrl: 'abstractTest1.html'
});
});
Run Code Online (Sandbox Code Playgroud)
显然我确实做错了.所以我的新问题是:
在采用抽象状态时,有没有理由使用命名状态而不是空字符串,或者它只是一种风格选择?
最近我开始探索Java 8,我无法理解Java功能实现lambda表达式所必需的"功能接口"的概念.有一个非常全面的 Java函数中的lambda函数指南,但我仍然坚持用于定义函数接口概念的章节.定义如下:
更确切地说,功能接口被定义为具有恰好一个抽象方法的任何接口.
然后他进入示例,其中一个是Comparator界面:
Run Code Online (Sandbox Code Playgroud)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方法都是抽象的,这意味着它有两个抽象方法.那么如果定义要求接口只有一个抽象方法,那么它如何工作呢?我在这里错过了什么?
sealed abstract和abstractScala类有什么区别?
我有一个定义抽象方法的抽象类A. 这意味着,对于要实现的类,必须实现所有抽象方法.
我希望我的所有子类都实现一个带有2个int作为参数的构造函数.
声明构造函数会破坏我的目的,因为我想要在子类中定义的构造函数,我对实现一无所知.而且我不能将构造函数声明为抽象;
有没有办法做到这一点 ?
我想要的例子:
让我们说我正在定义Matrix类的API.在我的问题中,Matrix无法改变其尺寸.
要创建Matrix,我需要提供它的大小.
因此,我希望我的所有实现者都为构造函数提供大小作为参数.这个构造函数的动机是问题,而不是实现问题.只要保留了方法的所有语义,实现就可以用它们做任何事情.
假设我想invert()在抽象类中提供该方法的基本实现.此方法将创建具有this反转尺寸的新矩阵.更具体地说,正如它在抽象类中定义的那样,它将this使用带有两个整数的构造函数创建同一类的新实例.由于它不知道实例,它将使用反射(getDefinedConstructor),我想要一种方式来保证我会得到它,并且它将对实现有意义.
具有一个(或多个)虚拟纯函数的类是抽象的,并且它不能用于创建新对象,因此它没有构造函数.
我正在读一本提供以下示例的书:
class Employee {
public:
Employee(const char*, const char*);
~Employee();
const char* getFirstName() const;
const char* getLastName() const;
virtual double earnings() const=0 // pure virtual => abstract class
virtual void print() const
private:
char* firstName, lastName;
};
Run Code Online (Sandbox Code Playgroud)
如果类是抽象的,为什么我们有一个构造函数?它稍后使用此类(Boss是公共派生的Employee):
void Boss::Boss (const char* first, const char* last, double s)
: Employee (first, last)
Run Code Online (Sandbox Code Playgroud) 定义抽象实例属性的最佳实践是什么,而不是属性?
我想写一些类似的东西:
class AbstractFoo(metaclass=ABCMeta):
@property
@abstractmethod
def bar(self):
pass
class Foo(AbstractFoo):
def __init__(self):
self.bar = 3
Run Code Online (Sandbox Code Playgroud)
代替:
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
Run Code Online (Sandbox Code Playgroud)
属性很方便,但对于不需要计算的简单属性,它们是一种过度杀伤.这对于将由用户进行子类化和实现的抽象类尤其重要(我不想强迫某人@property在他刚写入self.foo = foo时使用__init__).
Python问题中的抽象属性建议仅作为使用的答案,@property并且@abstractmethod:它不回答我的问题.
抽象类属性的ActiveState配方AbstractAttribute可能是正确的方法,但我不确定.它也只适用于类属性而不适用于实例属性.