精华内容
下载资源
问答
  • 父类: public class Fu { public Fu(){ System.out.println(this.getClass().getName()); this.f1(); } public void f1(){ System.out.println("1234"); } } 子类: public class Zi extends Fu{ public ...

    父类:

    public class Fu {
        public Fu(){
            System.out.println(this.getClass().getName());
            this.f1();
        }
    
        public void f1(){
            System.out.println("1234");
        }
    }
    

    子类:

    public class Zi extends Fu{
        public Zi(){
    
        }
    
        public void hello(){
            System.out.println("hello");
        }
    }
    

    测试类

    public class test {
        public static void main(String[] args) {
            Zi zi = new Zi();
        }
    }
    

    输出结果为:
    Zi
    1234
    在执行System.out.println(this.getClass().getName()); 语句时就充分说明,this是指向子类对象的。
    当执行this.f1(); 时,子类中没有这个方法,所以去父类中找。结果输出为1234。

    //可以理解为
    //在执行 Zi zi = new Zi(); 时
    public Zi(){
    	super();
    }
    //代码执行等同于
    public Zi(){
    	System.out.println(this.getClass().getName());
        this.f1();
    }
    //所以当你将 f1 方法换成 Zi的hello 方法时,输出为
    //Zi
    //hello
    

    但是成员变量是否和成员方法的结果是一致的呢???
    父类:

    public class Fu {
        int a = 11;
        public Fu(){ }
    
        public Fu(int i){
            System.out.println(this.getClass().getName());
            this.f1();
            System.out.println(this.a);
        }
    
        public void f1(){
            System.out.println("1234");
        }
    }
    

    子类:

    public class Zi extends Fu{
        int a = 12;
        public Zi(){
            super(1);
        }
    
        public void f1(){
            System.out.println("hello");
        }
    }
    

    测试类

    public class test {
        public static void main(String[] args) {
            Zi zi = new Zi();
            System.out.println(zi.a);
        }
    }
    

    输出结果
    在这里插入图片描述

    /**
    执行流程为:
    Zi zi = new Zi();    ---------->
    super(1);            ---------->
    System.out.println(this.getClass().getName());  //ZI
    this.f1();   //hello
    System.out.println(this.a);   //11  ------->
    完成zi对象的创建   -------->
    System.out.println(zi.a);    //12
    */
    

    借用其他前辈的一句话
    java中继承关系的父子类,相同的方法会被重写,那相同的变量会怎样呢?

    答案是变量没有重写之说,如果子类声明了跟父类一样的变量,那意谓着子类中将有两个相同名称的变量;
    出处:

    https://blog.csdn.net/ccccdddxxx/article/details/7896216?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159452917819195264502806%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159452917819195264502806&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v3-1-7896216.pc_ecpm_v3_pc_rank_v3&utm_term=java+%E7%BB%A7%E6%89%BF+%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F%E8%AE%BF%E9%97%AE%E7%9A%84%E7%89%B9%E7%82%B9
    

    我对前辈这句话的理解就是,变量不存在重写,只是两者作用的范围不一样。当子类中没有和父类重名的变量时,父类变量作用范围 是自己和其他子类且可以任意调用。 当子类中 有和父类重名的变量时,那么父类的作用范围就受到了限制,在子类中,只能通过super去调用,this的方法就不能调用了。

    结合图片和案例:
    在这里插入图片描述
    自己的总结:
    当子类父类中的成员没有冲突时,子类都可以通过this去调用。
    当 成员方法 重名,子类就会将父类中的方法进行重写。如果还想调用父类中的方法只能通过 super去进行调用。
    当时成员变量不存在覆盖重写:在子类中只能通过super调用父类的,但是你都进去父类 这个类里面去了,在去调用this.变量名,只能调用到父类的。super圆圈里也属于this。

    展开全文
  • 子类覆盖了父类的同名方法,父类引用调用子类中覆盖了父类同名方法,为什么会调用父类中的同名方法 public abstract class Beverage{ String description = "Unknow Beverage"; public String getDescription...
  • 覆盖 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

    展开全文
  • 子类如何调用父类方法

    千次阅读 2017-02-14 15:56:59
    一'子类继承父类 并重写了父类方法调用父类方法 1 zi() z= new fu();  z.f类方法();或者super.父类方法(); //注意 super不能用static修饰的方法中 如果父类非abstract class 也可以用fu f = ...

    一'子类继承父类 并重写了父类方法调用父类方法

    1 zi() z= new   fu();

      z.f类方法();或者super.父类方法();  //注意  super不能用在static修饰的方法中

    如果父类非abstract class

    也可以用fu f = new fu(); f.方法();

    二`如果子类未重写父类方法 以上均可

    zi() z =new zi() ; z.父类方法();

    如果重写了父类方法

    zi()  z = new zi();z.方法();     调用的是子类重写的方法

    三`在子类作用域内 父类不能调用子类的成员变量

    public class Fu{
            String  test () {
        return "父类的test方法";
    }
    }
    public class Zi extends  Fu {
          String   test(){ 
    return  "子类覆盖test方法";
    }
           String  test (){
    return  "子类test方法";
    }
           public static void main(String  [] args){
                  Fu f  = new  Zi();
                   f.test();   //报错 父类不能调用子类特有的方法,但可以调用从父类继承的test方法
    }
    }




    展开全文
  • 子类重定义父类方法只能调用自己的方法 。父类的同名函数被覆盖。(只要函数名相同就构成重定义)。要调用父类的。必须用作用域。 #include<iostream> #include<string> using namespace std; class ...

    子类重定义父类方法只能调用自己的方法 。父类的同名函数被覆盖。(只要函数名相同就构成重定义)。要调用父类的。必须用作用域。

    #include<iostream>
    #include<string>
    using namespace std;
    
    class MyStr
    {
    private:
        char *name;
        int id;
    public:
        MyStr() {}
        MyStr(int a) {
            cout<< a<<endl;
        }
        void fun(){
    
            cout<<"biss"<<endl;
        }
    };
    class allen: public MyStr
    {
    public:
        void fun(int a){
             MyStr::fun();
            cout<<"sun"<<endl;
        }
    };
    int main()
    {
        allen allen1;
        allen1.fun(100);
        allen1.MyStr::fun();//只能这样
    
    }

    转载于:https://blog.51cto.com/haidragon/2070855

    展开全文
  • java 通过子类怎么调用父类已经重写的方法

    千次阅读 多人点赞 2013-04-18 20:24:14
    我就想能不能再实例化的子类中调用父类已经被覆盖方法 百度了很久 除了说super 貌似就不行了   也能在子类中做一个新方法调用父类已经被覆盖方法 例如: import java.io.BufferedReader; ...
  • 父类A和接口P都定义了一个同名的属性b,那么在子类C调用这个属性是调用的谁的呢? 分开写 interface P{ int b = 10; } class A implements P{ int b = 5; } class C extends A{ public void print(){ System...
  • 在子类中,若要调用父类中被覆盖方法,可以使用super关键字。 package text;class Parent { int x; public Parent() { System.out.println("Parent Created1"); } public void show(){ System.ou...
  • 父类 实例 = new 子类() ... 实例可以调用父类中特有的方法(未在子类中覆盖方法) 实例可以调用子类中覆盖父类的方法 但不可以调用子类中特有的方法(即父类没有的方法) ...
  • JAVA中子类覆盖了父类的方法,是否还有办法通过子类调用父类同一方法
  • C++ | 子类对象调用父类函数

    千次阅读 2020-09-24 09:04:04
    C++中子类对象调用父类函数可通过域操作符(::)来实现,表明所调用函数的作用域。 //test.cc #include <iostream> using namespace std; class A { public: virtual void func() { cout <<" this...
  • Python 子类调用父类方法

    千次阅读 2014-12-08 17:09:12
    Python继承时,如果子类重写了init()函数,则...那么有没有比较方便的方法来从子类调用父类呢?  第一种是直接使用父类的类名来直接调用。(Python3.3) [python] view plaincopyprint?
  • 3、子类覆盖父类同名方法子类__init__()调用父类 init()。 要求: (1)创建父类class Person(object),父类包含def init(self,name,age)方法和 def talk(self)方法; (2)创建子类class Chinese(Person),该...
  • php只能使用单继承,就是说一个类只能直接从另一个类继承数据,但是一个类可以有多个子类软件开发,类的继承性使所建立的软件具有开放性、可扩充性。这是信息组织与分类的行之有效的方法。它简
  • C++子类调用父类覆盖的函数

    千次阅读 2013-04-15 11:53:55
    C++子类调用父类覆盖的函数  /*  * main.cpp  * C++子类调用父类覆盖的函数  */  #include class base  {  public:   base(){}   ~base(){}   virtual void print() {printf("i'm base!\...
  • 子类覆盖父类的同步方法

    千次阅读 2016-08-01 19:07:49
    1、如果父类的某个方法使用了synchronized关键字,而子类覆盖了这...2、当然,也可以子类中调用父类中相应的方法,这样虽然子类方法并不是同步的,但子类调用了父类的同步方法,也就相当子类方法也同步了
  • python进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错。 例如以下的代码: class A(object): def __...
  • python类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类,就要这个函数里...
  • Python子类调用父类内属性的方法

    千次阅读 2015-10-06 09:42:00
    python类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类,就要这个函数里...
  • __init__是Python类的初始化方法,所以继承关系,无论是父类还是子类的初始化方法都是这个,子类想实现这个函数,就要覆盖父类的这个函数,既然继承父类,就要这个函数里显式调用一下父类的__init__() ...
  • Python学习笔记--子类调用父类方法

    千次阅读 2013-07-31 07:49:54
    Python继承时,如果子类重写了init()函数,则父类的init()...那么有没有比较方便的方法来从子类调用父类呢?  第一种是直接使用父类的类名来直接调用。 class Parent: def __init__(self): print('This is pare
  • 在方法重写时,主要是为了扩展功能,而不是要完全覆盖超类的方法。下面我们就以toString()方法为例,来看一下子类怎样来调用父类中的同名方法: 超类的toString()方法: [code="javascript"]...
  • 学习java发现 方法覆盖方法名,方法参数类型、个数,返回值,必须一样,不能比父类方法有更严格的访问权限控制  final方法为最终方法,不可修改,即子类不可以覆盖父类的final方法  final变量 为常量 ...
  • 继承时候,同名方法发生覆盖了,通过临时私有变量先保存超类的同名方法,然后在子类同名方法中调用即可! function A() {  //通过call传递进来的this就是var b=new B()创建的b对象,所以this.sex打印了female ...
  • 这时只需使用”父类类名::方法” 或“parent::方法“来调用父类中被覆盖方法,有就是重新载入父类,然后再加上需要扩展的语句。 方法的重写 <?php class Person{ public $name; public function __...
  • 是子类拥有了父类的该方法只是没有显示表示,还是子类调用父类的该方法。 为此做了一下验证 代码如下: public class One { protected void printA() { System.out.println("父类printA"); } ...
  • Java 子类方法父类方法相互调用

    千次阅读 2016-04-27 20:28:49
    //若为public方法,this指的是子类对象实例,即调用子类对象实例被覆盖方法 this .fun2(); } /** * a:fun1 * a:fun2 */ private void fun2 (){ System.out.println( "a:fun2" ); } /** * a...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,916
精华内容 55,566
关键字:

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