是否可以访问对象超类(或祖父)的超类方法?
例如:
GrandFatherObject : NSObject
SuperObject : GrandFatherObject
SelfObject : SuperObject
Run Code Online (Sandbox Code Playgroud)
来自SelfObject:
- (void)overriddenMethod
{
// For Self
someCode();
// For Parent
[super overriddenMethod];
// For GrandParent
???
}
Run Code Online (Sandbox Code Playgroud)
我只能访问SelfObject(无法修改SuperObject或GrandFatherObject)
我注意到了:
class A {
ClassB b = new ClassB() { // anonymous class
/* some expression using this */
}
}
Run Code Online (Sandbox Code Playgroud)
每当我this在匿名类中使用关键字时,都会this引用封闭的外部类/枚举而不是匿名类.
这是否意味着this永远不能代表一个匿名类?只是"正常"的类和枚举?
还可以this或super代表一个界面?
class baseClass():
def __init__(self,mark,name):
self.mark = mark
self.name = name
class derivedClass(baseClass):
b1 = derivedClass(name='Jibin')
print b1.name
Run Code Online (Sandbox Code Playgroud)
这是我的代码最初和它工作正常.
(注意:我无权访问baseClass)
但后来我不得不通过一个附加的属性rank来derivedClass.所以我编辑这样的代码.
class baseClass():
def __init__(self,mark,name):
self.mark = mark
self.name = name
class derivedClass(baseClass):
def __init__(self,rank):
self.rank = rank
b1 = derivedClass(name='Jibin')
print b1.name
Run Code Online (Sandbox Code Playgroud)
这导致了错误 __init__() got an unexpected keyword argument 'name'
这是预期的__init__,derivedClass因为没有争论name.
我不想额外的参数添加name到__init__的derivedClass实时b'cos baseClass有十个参数,而不是2(标志,名称),如果我给他们都作为附加参数 derivedClass,我会搞乱参数列表.
注意:我知道使用baseClass.__init__(self)或初始化baseClasssuper(derivedClass, self).__init__()
以下为什么不工作:
class CTest(tuple):
def __init__(self,arg):
if type(arg) is tuple:
super(CTest,self).__init__((2,2))
else:
super(CTest,self).__init__(arg)
a=CTest((1,1))
print a
Run Code Online (Sandbox Code Playgroud)
输出是(1,1),而我期望看到(2,2).
另外,为什么我会得到弃用警告该对象.init()不带参数?我该怎么做呢?
我编写这样的代码给你一个例子
这是使用"$ this->"
<?php
class A{
public function example(){
echo "A";
}
}
class B extends A{
public function example2(){
$this->example();
}
}
$b = new B();
echo $b->example2();
?>
Run Code Online (Sandbox Code Playgroud)
这是使用父::
<?php
class A{
public function example(){
echo "A";
}
}
class B extends A{
public function example2(){
parent::example();
}
}
$b = new B();
echo $b->example2();
?>
Run Code Online (Sandbox Code Playgroud)
在OOP PHP中$ this->和parent ::之间有什么不同?
在以下Python 2.3脚本中调用基类函数时遇到问题.在审阅这篇文章后:
我生成了这小段代码:
class Base(object):
def func(self):
print "Base.func"
class Derived(Base):
def func(self):
super(Base, self).func()
print "Derived.func"
Derived().func()
Run Code Online (Sandbox Code Playgroud)
上面的代码生成此错误:
Traceback (most recent call last):
File "py.py", line 13, in ?
Derived().func()
File "py.py", line 10, in func
super(Base, self).func()
AttributeError: 'super' object has no attribute 'func'
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
当使用来自二级子类的超类构造函数时,它是否将参数传递给祖父项构造函数或直接父构造函数?
//top class
public First(type first){
varFirst = first;
}
//child of First
public Second(type second){
super(second); //calls First(second)
}
//child of Second
public Third(type third){
super(third); //calls First(third) or Second(third)?
}
Run Code Online (Sandbox Code Playgroud) 我有三个名为Human.java,Superhero.java和Run.java的类。超级英雄扩展人类和方法介绍()被覆盖在超级英雄与调用父类的介绍() 。但是,当我制作一个超级英雄对象并调用Introduction方法时,它不会打印基类方法的返回值。怎么了?提前致谢。
人.java
public class Human implements Comparable<Human> {
private int age;
private String name;
public Human(String givenName, int age) {
this.name = givenName;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String introduce() {
return "Hey! I'm " + name + " and I'm " + age + " years old.";
}
@Override
public int compareTo(Human H1) {
if(this.getAge() …Run Code Online (Sandbox Code Playgroud) 假设我有一个超类,它的构造函数中有3个参数,我继承了这个类,它还有一个带有3个参数的构造函数,我想调用超类构造函数,但之前我想在子类上做一些逻辑,我可以调用一个接收这3个参数的静态方法,但我只需返回一个,所以这就是我提出的解决方案
public class someClass extends SuperClass {
public someClass(int a,int b,int c) {
super(func(a,b,c),b,c);
}
public static int func(int a,int b,int c){
//usage a b c
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎有点难看,我想知道是否有更好的解决方案自己使用参数然后定期调用超级.请注意,我无法更改超类或子类的用法,因此无法更改工厂设计模式
首先,我运行以下代码,这真的很好:
class Monster:
def __init__(self):
self._can_do = []
print("created a monster")
super().__init__()
class Race(Monster):
""" all races must derive from this """
def __init__(self):
super().__init__()
print("created a race x")
class Human(Race):
def __init__(self):
super().__init__()
self._can_do.append("Do nothing special !")
print("created a human")
class Elf(Race):
def __init__(self):
super().__init__()
self._can_do.append("Avoid sleep")
print("created an elf")
class Class:
""" all classes must derive from this """
def __init__(self):
super().__init__()
print("created a class x")
class Fighter(Class):
def __init__(self):
super().__init__()
self._can_do.append("Hit hard")
print("created a fighter")
class Wizard(Class): …Run Code Online (Sandbox Code Playgroud) super ×10
inheritance ×5
java ×4
python ×4
constructor ×2
base-class ×1
cocoa ×1
generics ×1
objective-c ×1
oop ×1
overriding ×1
php ×1
superclass ×1
this ×1
typing ×1