精华内容
下载资源
问答
  • 为什么子类重写父类方法之后还要调用父类同名方法 比如public class A extends B { public void say ( ) { super.say ( ); } 为什么重写父类方法之后还要在方法体里面用super关键词调用父类的同名方法呢
  • supersuper关键词我们知道在java中可以通过super关键词调用父类非私有的属性或者方法,而在子类构造器中调用父类构造器的时候必须放在第一行,这是为什呢?我们看正常写法:public class SuperTest { public static ...
    4d1b09018657f55a91170fb08de6c8bb.png

    super

    super关键词

    我们知道在java中可以通过super关键词调用父类非私有的属性或者方法,而在子类构造器中调用父类构造器的时候必须放在第一行,这是为什呢?

    我们看正常写法:

    public class SuperTest { public static void main(String[] args) { Son son = new Son(); }}class Father{ public Father(){ String name = "老王"; }}class Son extends Father { public Son(){ super(); String name = "小宝"; }}

    为什么?

    super调用父类构造器必须放在子类构造器第一行,是因为如果放在后边,那么子类的继承覆盖就会失效,我们在使用子类的时候,在子类构造的时候为了满足子类的特殊行为进行定制,并通过语句执行表达,如果此时子类构造执行定制语句完毕又调用了父类的构造,那么父类的执行语句就会覆盖子类的行为,例如:

    class Father{ public Father(){ String name = "老王"; }}class Son extends Father { public Son(){ String name = "小宝"; //这里编译通不过,即便能通过,这样的行为会将子类的name赋值行为覆盖 super(); }}

    总之,是程序设计方法论的约束和规则限制。

    展开全文
  • 子类继承父类的构造方法 情况一:子类需要自动调用父类...情况三:子类重写__init__()方法又需要调用父类方法:使用super关键词: 实例: # 煎饼果⼦⽼师傅配⽅ class Master(object): # Master⼤师 师傅 def _

    子类继承父类的构造方法

    情况一:子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。

    情况二:子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。

    情况三:子类重写__init__()方法又需要调用父类的方法:使用super关键词:

    实例:

    # 煎饼果⼦⽼师傅配⽅
    class Master(object): # Master⼤师 师傅
        def __init__(self):
            self.kongfu = "古法煎饼果⼦配⽅"
        def make_cake(self):
            print("[古法] 按照 <%s> 制作了⼀份煎饼果⼦..." % self.kongfu)
    
    # 煎饼果⼦培训学校配⽅
    class School(object): # 学校 培训班(新东⽅,你懂得)
        def __init__(self):
            self.kongfu= "现代煎饼果⼦配⽅"
        def make_cake(self):
            print("[现代] 按照 <%s> 制作了⼀份煎饼果⼦..." % self.kongfu)
    
    
    class Damao(Master,School):
        def __init__(self):#重写父类的构造方法
            self.kongfu = "猫⽒煎饼果⼦配方"
               
        def make_cake(self):
            print("按照 <%s> 制作了⼀份煎饼果⼦..." % self.kongfu) 
    
        def make_old_cake(self):
            Master.__init__(self) #继承Master父类的方法,记得加self
            #此处也可以用super(Damao,self).__init__()继承父类,区别是此处不加self
            #两种方法如果需要传入参数,在括号里面添加即可
    
            Master.make_cake(self) #在子类方法中调用父类方法
    
        def make_new_cake(self):
            School.__init__(self)
            School.make_cake(self)
            
    damao = Damao()
    damao.make_cake()
    damao.make_old_cake()
    damao.make_new_cake()
    
    

     

    展开全文
  • android中子类重写父类Activity方法,在onCreate这个方法方法体里面有个setContentView方法,这个方法调用外部方法吗,为什么前面没加this关键词,不是说方法方法体里面调用外部方法要加this关键词,加了没加...
  • 笔记 情况一:子类需要自动调用父类方法子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()...情况三:子类重写__init__()方法又需要调用父类方法:使用super关键词: super(子类,self)...

    笔记 

    情况一:

            子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。

    情况二:

            子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。

    情况三:

            子类重写__init__()方法又需要调用父类的方法:使用super关键词:  super(子类,self).__init__(参数1,参数2,....)

    
    class Son(Father):
      def __init__(self, name):   
        super(Son, self).__init__(name)

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。

    子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。

    实例

    class Father(object): 
        def __init__(self, name): 
            self.name=name 
            print ( "name: %s" %( self.name) ) 
    
        def getName(self): 
            return 'Father ' + self.name 
    
    
    class Son(Father): 
        def getName(self):
            return 'Son '+self.name
    
    
    if __name__=='__main__': 
        son=Son('runoob') 
        print ( son.getName() )

    输出结果为:

    name: runoob
    Son runoob

    如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__,语法格式如下:

    实例

    class Father(object): 
        def __init__(self, name): 
            self.name=name 
            print ( "name: %s" %( self.name) ) 
        
        def getName(self): 
            return 'Father ' + self.name 
    
    class Son(Father): 
        def __init__(self, name): 
            print ( "hi" ) 
            self.name = name d
    
        ef getName(self): 
            return 'Son '+self.name 
    
    if __name__=='__main__': 
        son=Son('runoob') 
        print ( son.getName() )

    输出结果为:

    hi
    Son runoob

    如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字:

    super(子类,self).__init__(参数1,参数2,....)

    还有一种经典写法:

    父类名称.__init__(self,参数1,参数2,...)

    实例

    class Father(object): 
        def __init__(self, name): 
            self.name=name 
            print ( "name: %s" %( self.name)) 
    
        def getName(self): 
            return 'Father ' + self.name 
    
    class Son(Father): 
        def __init__(self, name): 
            super(Son, self).__init__(name) 
            print ("hi") 
            self.name = name 
    
        def getName(self): 
            return 'Son '+self.name 
    
    if __name__=='__main__': 
        son=Son('runoob') 
        print ( son.getName() )

    输出结果为:

    name: runoob
    hi
    Son runoob
    
    展开全文
  • supersuper关键词我们知道在java中可以通过super关键词调用父类非私有的属性或者方法,而在子类构造器中调用父类构造器的时候必须放在第一行,这是为什呢?我们看正常写法:public class SuperTest { public static ...
    ad632db13bfc0b10b1122d425008e33d.png

    super

    super关键词

    我们知道在java中可以通过super关键词调用父类非私有的属性或者方法,而在子类构造器中调用父类构造器的时候必须放在第一行,这是为什呢?

    我们看正常写法:

    public class SuperTest { public static void main(String[] args) { Son son = new Son(); }}class Father{ public Father(){ String name = "老王"; }}class Son extends Father { public Son(){ super(); String name = "小宝"; }}

    为什么?

    super调用父类构造器必须放在子类构造器第一行,是因为如果放在后边,那么子类的继承覆盖就会失效,我们在使用子类的时候,在子类构造的时候为了满足子类的特殊行为进行定制,并通过语句执行表达,如果此时子类构造执行定制语句完毕又调用了父类的构造,那么父类的执行语句就会覆盖子类的行为,例如:

    class Father{ public Father(){ String name = "老王"; }}class Son extends Father { public Son(){ String name = "小宝"; //这里编译通不过,即便能通过,这样的行为会将子类的name赋值行为覆盖 super(); }}

    总之,是程序设计方法论的约束和规则限制。

    展开全文
  • super的用法:链接1)super调用父类的有参构造方法的方式:super(参数名)。其中参数类型是父类的有餐构造方法中的参数类型2)super访问父类的对象属性的方式:子类在继承父类属性后可以重写该属性值,然后在子类中...
  • 子类的构造方法总是先调用父类的构造方法 子类的构造方法没有明显地指明使用父类的哪个构造方法(没有...子类的构造方法明确的指明使用父类的哪个构造方法(使用super关键词),子类调用父类super指定的构造方法 ...
  • 在某些特定的情况下,我们需要在父类中访问子类的静态变量和静态方法,这里我们使用static关键词,以static::xxx的格式访问实例化了调用当前方法的实例的那个类,用于访问静态成员和类的常量,它跟self的差别是访问...
  • java继承

    2015-05-15 21:33:34
    继承结论一:多态时,当子类覆盖了父类的方法,使用子类覆盖的方法 。 结论二:当子类覆盖...super是java中的关键词 就是调用父类中的方法。class SuperClass { private int number; public SuperClass() { thi
  • super关键词的使用

    2020-11-25 18:52:59
    应该注意到,子类一定会调用父类的构造函数来完成初始化工作,一般是调用父类的默认构造函数, 如果子类需要调用父类其它构造函数,那么就可以使用 super() 函数。 访问父类的成员:如果子类重写了父类的某个方法,...
  • 上一更新中,我们提到了在子类中可以重写父类的方法,重写后,子类的对象不能调用父类的此方法,但是可以在子类中调用,那么调用的时候就需要使用super关键词。 super关键词只可以用在有继承关系的子类中,有两个...
  • 继承关系中,父子类构造方法的访问特点: 1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造方法,后执行子类...子类必须调用父类构造方法,不写则赠送super(); 写了则用写的指定的s...
  • 2、父类私有的成员不能被继承 3、父类的构造函数不能被继承 4、创建子类对象时会先默认调用父类的无参构造方法(调用父类的构造方法是为了初始化从父类继承下去的属性的) super 关键字 super 关键字与 this 关键字...
  • 子类内部调用父类的属性和方法是通过super关键词来实现的! //子类 package com.yuecheng.oop.Demo05; //学生也是人(子类,派生类): 学生 is 人; //子类继承父类,就会继承父类所有的方法 //注意:private...
  • Java继承类对象之间的创建顺序和销毁顺序是一致的,也就是父类构造函数先调用,父类对象先销毁. ...子类重写父类的的方法时,当子类调用了super关键词,则先调用子类的同名方法,然后调用父类方法.  ...
  • 如果子类没有显示调用父类中的构造方法,则系统默认会调用父类中的无参构造方法;若此时父类中没有定义无参构造方法则会报错。 java中的super关键词 super用于代表子类的直接父类的特征 super可以访问: 父类的成员...
  • super关键词

    2015-08-27 16:58:00
    1)调用super()必须写在子类构造方法的...2)super()和this()类似,区别是,super从子类调用父类的构造方法,this()在同一类内调用其它方法。 3)super()和this()均需放在构造方法内第一行。 4)尽管可以用this...
  • 继承的理解一1、继承是单继承,继承一个父类2、判断子类与父类的关系:is-a(狗是一个宠物)3、用关键词extends4子类可以调用父类方法(注有权限问题)二子类访问父类的成员1访问父类的构造方法super();...
  • 指正调用方法的对象(当前对象),在方法内部使用,也可以作为方法的参数进行参数转递 格式: this.成员变量名 this.成员方法名(参数) this.(参数) Super关键词子类中声明的成员变量与父类中声明的成员变量...
  • 在类的方法定义中使用super关键词代表使用该方法的对象对父类的引用(在子类中使用super可以调用父类方法,属性),简而言之,super用于访问当前对象的父类成员 4.2.2super关键词用法分类 super关键词一共两种...
  • 与this对应,this对应的父类为super,可在子类中用super调用父类方法和父类构造器。 final,可修饰数据、方法、类;private(隐式声明为private,因为不能被重写,研究底层时看看) static与final一起修饰的域只...
  • 可以通过super关键词调用父类(superclass)中被子类(subclass)所重写(override)的方法子类在任何情况下都不可以删除父类中的方法和属性。 子类继承父类所有方法所有属性(不包括被final修饰的方法和属性...
  • 简介: java多态:意思是一种行为具有多个不同表现形式或形态的能力。...方法重写:属于运行时期多态,发生在继承关系中,子类重写父类方法,我们可以根据子类对象、super关键词来决定调用子类还是父类的方法。 ...
  • 在es6中class可通过关键词extends来实现继承,es5则是...有一个注意点:就是子类在constructor方法调用super,super就是父类的构造函数,我们必须先构造父类,才能使用子类。如果子类不显式声明constructor,那么...
  • 1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造方法,后执行子类构造方法 ...子类必须调用父类构造方法,不写则赠送super(); 写了则用写的指定的super调用,super只能有一个,且必...
  • 子类 调用 父类方法时 用 super. 超类方法名() 子类 没有 显式 调用 超类 的 构造器,自动调用 超类 的 无参构造器,如果 超类 没有,子类 也没调用其他构造器,就会报错。???????????? 关键字 this 指示隐式...
  • java学习笔记(七)

    2020-12-14 20:53:43
    java学习笔记(七) java部分: ...父类只有有参构造器没有无参构造器时(无参构造器在有有参构造器时不会默认生成),子类调用默认构造方法会报错(子类调用构造方法默认调用父类的无参构造方法).简而言之
  • java中的继承

    2020-11-10 20:03:35
    关键词:extends 继承 (子类 extends 父类)如:public class cat extends animals,子类cat继承父类animal可以调用父类中公共的属性和方法。 思考:继承可以简化代码,提高代码的利用率,所以是不是只要有相同的就...
  • protected: 被定义的类和子类父类可以调用 private:只能被定义的类调用 2、类属性必须被定义为public(公有)、protected(受保护)、private(私有)之一。 类方法没有设置,默认为public。 3、构造...

空空如也

空空如也

1 2 3 4 5 6
收藏数 113
精华内容 45
关键字:

关键词子类调用父类方法