标签: superclass

是否可以在超类对象上调用子类的方法?

动物是狗和狗的超类有一种叫做树皮的方法

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)

会发生什么?

  1. 不允许转让
  2. 允许对树皮的调用,并在运行时打印"woof"
  3. 允许吠叫,但没有打印
  4. 对bark的调用会导致编译时错误
  5. 对bark的调用导致运行时错误

当我们检查对象是否是狗时,我说2; 因为狗是带有树皮方法的类,如果是,那么我们称它为打印出来的:s

我的理解在这里是否正确?

java inheritance subclass superclass

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

如何从其他地方调用Objective-C对象的超类方法?

如果你正在实现一个子类,你可以在你的实现中显式调用超类的方法,即使你已经覆盖了那个方法,即:

[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)

iphone cocoa overriding objective-c superclass

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

Kotlin的构造函数

最近开始与Kotlin

根据Kotlin文档,可以有一个主构造函数和一个或多个辅助构造函数.

我不明白为什么我看到这个错误 在此输入图像描述

由于类test没有主构造函数.

这很好用:

open class test {
}

class test2 : test() {
}
Run Code Online (Sandbox Code Playgroud)

这是我遇到的另一个困难,当我定义一个辅助构造函数时,IDE会显示另一个错误

没有主构造函数,超类型初始化是不可能的 在此输入图像描述

但是在之前的工作示例中,我确实初始化了它,但它工作正常.我弄错了什么?

oop constructor initialization superclass kotlin

16
推荐指数
1
解决办法
7990
查看次数

不可安装的超类

所以,我正在编写一个用于连接外部帐户提供程序(Twitter,Facebook等)的模块,我有一个单独使用的超类,但包含需要由子类调用的通用方法,用于持久化auth标记,获取auth令牌并取消授权提供者.我的问题是,有没有办法让它不可实现,或者我应该遵循同意的成年人规则,只是让任何使用它的人在他们认为合适时犯错误?除了文档字符串之外,还有一种很好的方法可以表示某人不应该单独使用这个超类吗?

python superclass

15
推荐指数
3
解决办法
384
查看次数

调用重写方法,超类调用重写方法

此代码抛出异常,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)

python inheritance superclass

15
推荐指数
3
解决办法
2万
查看次数

如何在python中使用继承将多个对象连接成一个对象?(在运行时)

我有以下课程:

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.

python oop superclass python-2.7

15
推荐指数
2
解决办法
140
查看次数

Python 3:super()意外引发TypeError

来自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)

python inheritance super typeerror superclass

15
推荐指数
2
解决办法
824
查看次数

为什么受保护的超类成员在作为参数传递时无法在子类函数中访问?

我得到一个编译错误,我有点困惑.这是在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?

c++ protected member superclass

13
推荐指数
1
解决办法
4693
查看次数

我是否需要为NSObject调用[super init]或[super initWithCoder]等

通常,当我从UI类中继承子类时,我将调用感兴趣的超类初始化器.但是,我不确定实现细节NSObject,并且似乎在成员变量方面没有太多进展,所以我想知道:[super init]如果我的子类扩展,我是否需要调用NSObject

inheritance objective-c nsobject superclass ios

13
推荐指数
2
解决办法
2493
查看次数

委托构造函数:委托构造函数的初始化程序必须单独出现

我有一对在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)

"委托构造函数的初始化程序必须单独出现"......

有没有办法解决??

c++ constructor delegation superclass c++11

12
推荐指数
1
解决办法
5235
查看次数