动物是狗和狗的超类有一种叫做树皮的方法
public void bark()
{
System.out.println("woof");
}
Run Code Online (Sandbox Code Playgroud)
考虑以下:
Animal a = new Dog();
if (a instanceof Dog){
a.bark();
}
Run Code Online (Sandbox Code Playgroud)
会发生什么?
当我们检查对象是否是狗时,我说2; 因为狗是带有树皮方法的类,如果是,那么我们称它为打印出来的:s
我的理解在这里是否正确?
如果你正在实现一个子类,你可以在你的实现中显式调用超类的方法,即使你已经覆盖了那个方法,即:
[self overriddenMethod]; //calls the subclass's method
[super overriddenMethod]; //calls the superclass's method
Run Code Online (Sandbox Code Playgroud)
如果你想从子类的实现之外的某个地方调用超类的方法,即:
[[object super] overriddenMethod]; //crashes
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?而且,通过扩展,是否有可能在实现中超过一个级别,即:
[[super super] overriddenMethod]; //will this work?
Run Code Online (Sandbox Code Playgroud) 最近开始与Kotlin
根据Kotlin文档,可以有一个主构造函数和一个或多个辅助构造函数.
由于类test没有主构造函数.
这很好用:
open class test {
}
class test2 : test() {
}
Run Code Online (Sandbox Code Playgroud)
这是我遇到的另一个困难,当我定义一个辅助构造函数时,IDE会显示另一个错误
但是在之前的工作示例中,我确实初始化了它,但它工作正常.我弄错了什么?
所以,我正在编写一个用于连接外部帐户提供程序(Twitter,Facebook等)的模块,我有一个单独使用的超类,但包含需要由子类调用的通用方法,用于持久化auth标记,获取auth令牌并取消授权提供者.我的问题是,有没有办法让它不可实现,或者我应该遵循同意的成年人规则,只是让任何使用它的人在他们认为合适时犯错误?除了文档字符串之外,还有一种很好的方法可以表示某人不应该单独使用这个超类吗?
此代码抛出异常,AttributeError,"wtf!" ,因为A.foo()是打电话B.foo1(),不应该打电话A.foo1()吗?如何强制它调用A.foo1()(内部的任何方法调用A.foo()都应该调用A.*)
class A(object):
def foo(self):
print self.foo1()
def foo1(self):
return "foo"
class B(A):
def foo1(self):
raise AttributeError, "wtf!"
def foo(self):
raise AttributeError, "wtf!"
def foo2(self):
super(B, self).foo()
myB = B()
myB.foo2()
Run Code Online (Sandbox Code Playgroud) 我有以下课程:
class hello(object):
def __init__(self):
pass
class bye(object):
def __init__(self):
pass
l = [hello, bye]
Run Code Online (Sandbox Code Playgroud)
如果我执行以下操作,则会收到错误消息:
>>> class bigclass(*l):
File "<stdin>", line 1
class bigclass(*l):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以在运行时自动执行此操作吗?
我使用的是Python 2.7.
来自Java,我正在努力解决继承,抽象类,静态方法和Python中的OO编程的类似概念.
我有一个表达式树类的实现,由(简化)给出
# Generic node class
class Node(ABC):
@abstractmethod
def to_expr(self):
pass
@staticmethod
def bracket_complex(child):
s = child.to_expr()
return s if isinstance(child, Leaf) or isinstance(child, UnaryOpNode) else "(" + s + ")"
# Leaf class - used for values and variables
class Leaf(Node):
def __init__(self, val):
self.val = val
def to_expr(self):
return str(self.val)
# Unary operator node
class UnaryOpNode(Node):
def __init__(self, op, child):
self.op = op
self.child = child
def to_expr(self):
return str(self.op) + super().bracket_complex(self.child)
# Binary operator node
class …Run Code Online (Sandbox Code Playgroud) 我得到一个编译错误,我有点困惑.这是在VS2003上.
错误C2248:'A :: y':无法访问在类'A'中声明的受保护成员
class A
{
public:
A() : x(0), y(0) {}
protected:
int x;
int y;
};
class B : public A
{
public:
B() : A(), z(0) {}
B(const A& item) : A(), z(1) { x = item.y;}
private:
int z;
};
Run Code Online (Sandbox Code Playgroud)
问题是x = item.y;
访问权限被指定为受保护.为什么B类的构造函数不能访问A :: y?
通常,当我从UI类中继承子类时,我将调用感兴趣的超类初始化器.但是,我不确定实现细节NSObject,并且似乎在成员变量方面没有太多进展,所以我想知道:[super init]如果我的子类扩展,我是否需要调用NSObject?
我有一对在C++ 03风格下运行良好的构造函数.其中一个构造函数调用超类(或基类)构造函数......
class Window : public Rectangle
{
public:
Window() : win(new RawWindow(*this))
{
refresh();
}
Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this))
{
refresh();
}
...
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何使用新的C++ 11委托ctor功能来解决这个问题.但是,以下代码给出以下编译器错误...
class Window : public Rectangle
{
public:
Window() : win(new RawWindow(*this))
{
refresh();
}
Window(Rectangle _rect) : Rectangle(_rect), Window(){}
Run Code Online (Sandbox Code Playgroud)
"委托构造函数的初始化程序必须单独出现"......
有没有办法解决??
superclass ×10
inheritance ×4
python ×4
c++ ×2
constructor ×2
objective-c ×2
oop ×2
c++11 ×1
cocoa ×1
delegation ×1
ios ×1
iphone ×1
java ×1
kotlin ×1
member ×1
nsobject ×1
overriding ×1
protected ×1
python-2.7 ×1
subclass ×1
super ×1
typeerror ×1