精华内容
下载资源
问答
  • 覆盖 override 覆盖是指在有继承关系的类中,子类中实现了与基类同名的方法,在子类的实例调用该方法时,实际调用的是 子类中覆盖版本,这种现象叫做覆盖 调用super 函数的两个方法: 1.super(cls, obj) 返回绑定...

    覆盖 override
      覆盖是指在有继承关系的类中,子类中实现了与基类同名的方法,在子类的实例调用该方法时,实际调用的是
      子类中的覆盖版本,这种现象叫做覆盖


    调用super 函数的两个方法:
      1.super(cls, obj) 返回绑定超类的实例(要求obj必须是cls类型的实例)
      2.super() 返回绑定超类的实例,等同于: super(__class__, 实例方法的第一个参数), 必须在方法内调用

    作用:
      可以用super() 返回的实例间接调用其父类的覆盖方法

     

    class A:
       def work(self):
         print("A.work")
    class
    B(A): def work(self): print("B.work") def super_work(self): self.work() #调用父类的work方法 super(B, b).work() super().work() #这种调用父类的方法只能在方法中调用 super(self.__class__, self).work() b = B() b.work() print("------") A.work(b) #对象b调用A类里面的work方法 print("++++++") super(B, b).work() print("******") b.super_work() 输出结果; tarena@tedu:~/zengsf/824$ python3 exercise824_2.py B.work ------ A.work ++++++ A.work ****** B.work A.work A.work A.work

     

    转载于:https://www.cnblogs.com/zengsf/p/9532349.html

    展开全文
  • 我就在想能不能再实例化的子类中调用父类已经被覆盖的方法 百度了很久 除了说super 貌似就不行了   也能在子类中做一个新方法来调用父类已经被覆盖的方法 例如: import java.io.BufferedReader; ...

    = =今天看书看到覆盖和重载

    我就在想能不能再实例化的子类中调用父类已经被覆盖的方法


    百度了很久

    除了说super  貌似就不行了

     


    也能在子类中做一个新方法来调用父类已经被覆盖的方法  

    例如:

    import java.io.BufferedReader;
    
    public class baidu extends Search {
    
    	public static void main(String[] args) throws IOException {
    		new baidu().superFunction() ;
    	}
    
    	public void function(){
    		System.out.println("I am baidu!");
    	}
    	
    	public void superFunction(){
    		super.function() ;
    	}
    }
    
    
    class Search{
    	public void function(){
    		System.out.println("I am search!");
    	}
    }
    

    也有人说

    A为父类,B为子类,都有一个m()方法

    B b = new B();

    想通过((A)b).m()

    来调用

    实际上也是不行的 

    详见见识:

    B b=new B(); 这种方式,实际上是实例化了子类的对象,注意:内存中还是子类对象。
    ((A)b).m();  表面上看起来是父类对象了,但是由于内存中是子类对象,所以调用的还是子类方法。
    
    A b=new B(); 
    b.m(); 
    这种方法和你写的实际是一个效果,虽然上溯造型到了父类,由于子类重写了父类的方法,调用的还是子类的方法(也就是所:方法的实现,最后是在子类中实现的)。
    
    所以,总结如下:
    如果子类没有重写父类的方法,调用父类的方法的时候,实际上是去父类的内存中实现,可以调用父类方法。
    如果子类重写了父类的方法,那么,你虽然上溯造型到了父类,由于内存还是子类,该方法的实现还是在子类,所以用实例化的对象是调用不到父类的,这种情况下,只能用super关键字。
    综上 
    如果不是类内部,而是外部调用,比如你例子中的main方法,答案是 

    不能。你不能调用已经被覆盖掉的父类的方法。 

    这也是覆盖override的最初设计意图之一。 

    大多数时候,覆盖父类意味着子类想做些特殊的处理。如果能够跳过子类的特殊处理,就会打开一个无法控制的缺口,会导致很多很多问题。 

    唯一可以调用父类方法的地方,就只有类内部。子类自己控制,什么时候该调用父类,什么时候做自己的处理。
    
    
    
    
    
    
    
    
    
    
    想到最后才发现自己为啥会纠结这么一个问题=。=
    方法被覆盖自然是需要修改
    既然修改了为什么还要想着去调用父类中的方法
    真是多此一举
    
    

    展开全文
  • 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。 package text;class Parent { int x; public Parent() { System.out.println("Parent Created1"); } public void show(){ System.ou...

    在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

    package text;

    class Parent
    {
        int x;
        public Parent()
        {
            
                System.out.println("Parent Created1");
          }
        public void show(){
            System.out.println("Parent Created2");
        }

    }



    class Child extends Parent
    {
        int y;
        public Child()
         {
        
            System.out.println("Child Created1");

          }
        public void show(){
            super.show();
            System.out.println("Parent Created3");
        }

    }



    public class text
    {


        public static void main(String args[])
         {

                Child c = new Child();
        c.show();
      }

    }

    转载于:https://www.cnblogs.com/liushiqiang123/p/7816787.html

    展开全文
  • 父类 实例 = new 子类() ... 实例可以调用父类中特有的方法(未在子类中覆盖的方法) 实例可以调用子类中覆盖父类的方法 但不可以调用子类中特有的方法(即父类中没有的方法) ...
    1. 父类 实例 = new 子类()

    2. 实例可以调用父类中特有的方法(未在子类中覆盖的方法)

    3. 实例可以调用子类中覆盖父类的方法

    4. 但不可以调用子类中特有的方法(即父类中没有的方法)

    展开全文
  • 面向对象语言三大特性之二继承继承关系,”子类就是一个父类”。也就是说,子类可以当作父类看待。例如父类是员工,子类是讲师,那么“讲师就是一个员工”,关系:is-a。格式:定义父类格式:(一个普通...
  • 看java继承这一块的时候发现了一个问题,即父类未被子类覆盖的方法是如何调用的? 是子类拥有了父类的该方法只是没有显示表示,还是子类调用父类的该方法。 为此做了一下验证 代码如下: public class One...
  • 子类的方法与超类同名...下面我们就以toString()方法为例,来看一下子类怎样来调用父类中的同名方法: 超类的toString()方法: [code="javascript"]Rectangle.prototype.toString=function(){ ...
  • 继承时候,同名方法发生覆盖了,通过在临时私有变量先保存超类同名方法,然后在子类同名方法中调用即可! function A() {  //通过call传递进来this就是var b=new B()创建b对象,所以this.sex打印了female ...
  • 表示父类对象的默认引用如果子类调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法。使用super调用父类方法使用super调用父类的构造方法调用构造方法本类中调用另一个重载构造方法用this...
  • 这时只需使用”父类类名::方法” 或“parent::方法“来调用父类中被覆盖的方法,有就是重新载入父类,然后再加上需要扩展的语句。 方法的重写 <?php class Person{ public $name; public function __...
  • 重写父类的方法

    千次阅读 2017-02-16 11:24:55
    1、当子类覆盖了父类的方法后,子类的对象将无法访问父类中被覆盖的方法,但可以在子类中调用父类中被覆盖的方法。如果需要在子类中调用父类中被覆盖的方法,则可以使用super(被覆盖的是实例方法)或者父类类名(被...
  • 如果子类调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法。 使用super调用父类方法 使用super调用父类的构造方法 调用构造方法 本类中调用另一个重载构造方法用this(参数列表) ...
  • 调用父类方法super

    2019-03-11 09:24:00
    问题你想在子类中调用父类的某个已经被覆盖的方法。 解决方案为了调用父类(超类)的一个方法,可以使用super()函数,比如: class A:  def spam(self):  print('A.spam') class B(A):  def spam(self): ...
  • 如果子类调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法。 使用super调用父类方法 使用super调用父类的构造方法 调用构造方法 本类中调用另一个重载构造方法用this(参数列表) ...
  • 继承继承注意的问题:1 重写(也叫覆盖,也叫重构):重写方法必须和重写方法具有相同的方法名称、参数列表和返回值类型; 重写方法不能使用比重写方法更严格的访问权限。重写是类与类之间的关系,两者必须是...
  • Python调用父类方法-super

    千次阅读 2019-01-01 14:51:23
    在子类中调用父类的某个已经被覆盖的方法,需要使用 super() 函数。 class Parent(object): def spam(self): print('Parent.spam') class Child(Parent): def spam(self): print('Child.spam') super().s....
  • 本文实例讲述了PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作。分享给大家供大家参考,具体...比如上百成千行代码,这时只需使用”父类类名::方法” 或“parent::方法“来调用父类中被覆盖的方法,有就...
  • 此时若想调用父类中的方法,有两种方案可以达成。 1.调用未绑定的父类方法 2.使用super函数,也就是我们今天要讲的重点 实例说明 举个例子,首先来看一下代码 class Fish: def _init_(self): #坐标取0到10之间的...
  • 你想在子类中调用父类的某个已经被覆盖的方法。 解决方案 为了调用父类(超类)的一个方法,可以使用super()函数,比如: class A: def spam(self): print('A.spam') class B(A): def spam(self): print('B....
  • 子类new出来的对象,可以调用父类中的方法(private修饰的除外),但当子类中出现父类方法名以及参数一样的方法时,子类中的方法就是重载,覆盖父类中的相同的方法。 注意的方面: 1.子类中的方法与父类中的方法在...
  • 一期财务项目中,一个子类业务对象和父类业务对象同时注入同一个属性时,如果子类调用父类中某一个方法,如果该父类的方法引用了之前注入的属性,该属性是被子类覆盖的,也就是说父类的上下文中,该属性是空的,...
  • [00807]调用父类方法

    2017-01-15 21:21:24
    在子类中调用父类的某个已经被覆盖的方法。 二、解决方案 super() 三、代码说明#!/usr/bin/env pythonclass A: def __init__(self): self.x = 0 def spam(self): print ("A.spam")class B(A): def __init_
  • PHP中,会遇到这样的情况,子类继承父类,但是又...这时只需使用”父类类名::方法” 或“parent::方法“来调用父类中被覆盖的方法,有就是重新载入父类,然后再加上需要扩展的语句。  方法的重写 class Person{
  • 重写、调用父类方法

    2019-01-06 22:32:28
    重写、调用父类方法:所谓重写,就是子类中,有一个和父类相同名字的方法在子类中的方法覆盖父类中同名的方法 在python中继承中的一些特点: 1:在继承中基类的构造(init()方法)不会自动调用,它需要在其...
  • 如果父类构造器中调用被子类重写的方法,会导致子类重写的方法在子类成员变量初始化之前和构造器执行之前执行,从而导致子类重写的方法无法访问到子类实例变量的值,因为此时这些变量还没有初始化。 方法中使用...
  • 在子类中调用父类的某个已经被覆盖的方法。 为了调用父类(超类)的一个方法,可以使用super()函数,比如: class A: def spam(self): print('A.spam') class B(A): def spam(self): print('B.spam') super()...
  • 初学Java,调用父类方法(十一)

    千次阅读 2012-02-06 10:22:37
    在Java的继承关键字是extends,而C#是一个冒点:他们子类调用父类的关键字也不同,Java 子类调父类方法是''super.... //在子类中通过super 显式调用父类被覆盖的实例方法 super.fly(); }public void callOverrideMet
  • 调用父类的构造

    2012-04-12 17:15:03
    父类实例的super引用 如果需要在子类方法中调用父类被覆盖的实例方法,可以用super作为调用者来调用父类被覆盖的实例方法。  public class Ostrich extends Bird{  … … //子类中原有的内容  public void ...
  • 父类中的static方法可以以多态形式在子类中重写,但是不能被覆盖,其实没有覆盖也就谈不上多态。 即使重写了,在向上转型调用子类重写父类static方法时,调用的还是父类static方法。 父类: 1 package ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 578
精华内容 231
关键字:

在子类中调用父类中被覆盖的方法