精华内容
下载资源
问答
  • 通常情况下在父类中不能直接调用子类中的方法(重写的除外),但是在某些特殊的情况下,需要根据一个父类对象调用子类方法,原理就使用java的反射原理。例如:Person类,有一个name属性 public class Person { ...

    通常情况下在父类中不能直接调用子类中的方法(重写的除外),但是在某些特殊的情况下,需要根据一个父类的对象来调用子类的方法,原理就使用java的反射原理。例如:Person类,有一个name属性

    public class Person {
        private String name;
    ​
        public String getName() {
            return name;
        }
    ​
        public void setName(String name) {
            this.name = name;
        }
    }
    Student类继承了Person类,添加了一个no属性,代表学号
    public class Student extends Person {
        private String no;
    ​
        public String getNo() {
            return no;
        }
    ​
        public void setNo(String no) {
            this.no = no;
        }
    }
    写一个main方法,new了一个Student对象,赋值name为test,no为18
    public static void main(String[] args) throws Exception {
      Student a = new Student();
      a.setName("test");
      a.setNo("18");
    ​
      Person p = a;
    ​
      Method method = p.getClass().getMethod("getNo"); // 父类对象调用子类方法(反射原理)
      Object o = method.invoke(p);
      
      System.out.println(p.getName());
      System.out.println(o.toString());
    }
    运行结果:
    test
    18

    如果是Student重写了Person中的方法:

    public class Student extends Person {
        private String no;
    ​
        public String getNo() {
            return no;
        }
    ​
        public void setNo(String no) {
            this.no = no;
        }
        
        @Override
        public String getName() {
            return "rewrited";
        }
    }
    运行结果是:
    rewrited
    18

    展开全文
  • 为什么要声明父类对象调用子类对象? 原因:多态 1.声明父类对象,指向子类对象 2.声明的父类对象只能调用父类中定义的方法和变量 3.如果子类中重写了父类中的方法,那么在调用这个方法的时候,将会调用子类中的这个...

    为什么要声明父类对象调用子类对象?

    原因:多态
    1.声明父类对象,指向子类对象

    2.声明的父类对象只能调用父类中定义的方法和变量

    3.如果子类中重写了父类中的方法,那么在调用这个方法的时候,将会调用子类中的这个方法(动态连接、动态调用)

    4.变量不能被重写(覆盖),"重写"的概念只针对方法,如果在子类中重新定义修改了父类中的变量,声明的父类对象调用的依然是父类中的变量

    多态的3个必要条件:
    ①继承
    ②重写
    ③父类引用指向子类对象

    展开全文
  • 众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢? 这里我先给一个例子 class Father{ public void announce(){ ...
    众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢?
    

    这里我先给一个例子

    class Father{
        public void announce(){
            System.out.println("Father");
        }
    }
    class Child extends Father{
        @Override
        public void announce(){
            System.out.println("Child");
        }
    }
    public class Hello {
        public static void main(String[] args){
            System.out.println("Hello");
            Father father=new Child();
            father.announce();
        }
    }

    这段代码中,我们把一个子类的对象赋值给了父类的句柄,之后调用已经被子类重载的方法,我们会得到的结果如下:

    Hello
    Child

    我们可以看到,使用这个父类handle,我们调用的实际上是子类的announce方法。知道了这个特性简直可以搞事。

    这里我们就要介绍一个概念:动态调用

    动态链接是指,当一个方法仅在父类中实现而没有在子类中实现是,我们调用父类中方法。而当一个方法在父类和子类中都进行了实现时,无论handle的类型,我们都会调用子类的方法。但这个方法必须是在父类中定义过的,否则则无法通过父类handle去调用。

    另外需要注意的是Java中能够自动向上转型,即可以把子类对象赋值给父类handle<但是不能自动向下转型,向下转型的方法需要人工去定义。

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201712/05/1512488608_850150.png) ![图片说明]...为什么子类方法也被调用了 而且还是优先父类方法调用的!!!
  • 父类引用调用子类对象

    千次阅读 2017-12-07 09:30:03
    创建对象时,会为每个对象开辟一块 动态存储区 ---用来存放对象的属性 在"生成"类时,会为每个类开辟一块 静态存储区 ---用来存放该类...子类对象调用父类继承来的方法(未重写),从父类的静态存储区调用父类方法

    创建对象时,会为每个对象开辟一块 动态存储区1 ---用来存放对象的属性

    在"生成"类时,又会为类的这些方法开辟一块 动态存储区2 ---用来存放该类的方法


    对象从自己的动态存储区1调用属性,从动态存储区2调用方法。


    对象调用方法的方式---“映射”:方法名----->对应的类的动态存储区2---->方法


    子类对象调用父类继承来的方法(未重写),从父类的动态存储区2调用父类的方法;

    子类对象调用重写的父类的方法,从子类的动态存储区2调用重写后的方法;

    子类对象调用子类独有的方法,从子类的动态存储区2调用子类的方法。




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

    千次阅读 2020-02-10 11:35:25
    当父类中声明某个函数为虚函数,并且子类得载...2.我们new一个子类对象赋给父类(父类的引用指向了子类的对象,也就是说java里说的多态,),父类对象不可以调用子类方法,但如果子类重写了父类的某个方法,则此时...
  • //这里可以调用子类独有的方法,但是对象是dad类的 } public void son( ) {}//这是子类独有的方法 } //这是子类 public class Text { public static void main(String[] args) { Dad dad = new ...
  • 父类调用子类方法

    2019-09-26 22:42:04
    python和其他面向对象语言类似,每个类可以拥有一个或者多个父类,它们从父类那里继承了属性和方法。如果一个方法子类的实例中被调用,或者一个属性在子类的实例中被访问,但是该方法或属性在子类中并不存在,那么...
  • 创建子类对象时,会把父类里的成员变量和方法也加载进内存(因为要加载进内存,所以要看下这些数据是怎么初始化的,所以调用了父类的构造,仅此而已,并不是去创建父类对象) 然后用this和super这两个引用来区分...
  • pb中父类动态调用子类的函数和事件方法——bjash,2007-07-26有了dynamic后就不要用post父类.dynamic function uf_set() 父类.dynamic event ue_open() 
  • 多态的体现。 代码如下;... 2.2 该实例如果调用父类中的方法,若该方法被子类重写,则一定调用的是在子类中重写后的该方法。  2.3 该实例不可以调用父类中没有的方法。(该方法子类特有)
  • PHP父类调用子类方法

    千次阅读 2014-11-12 12:13:59
     * 父类调用子类方法 基类   * @author ikmb   *   */  class Base {   /**   * 调用子类方法   * @author ikmb email:ikmb@163.com   * @version 创建时间:2011-7-8 下午...
  • 我们可以通过参数将子类传递给父类,实现在父类调用子类方法。 实现方式有两种: 一、 基于接口 定义接口,父子类都实现接口,父类方法接收接口类型参数 特点: 结构简单,思路清晰。 基于接口,轻松应对多级继承...
  • 答案是:创建子类对象时不会创建父类对象。我们创建子类对象时,只是说创建了父类空间,并进行了初始化。如果说创建子类的时候就会创建它的父类,那内存空间中不都是Object类的对象吗?(想想java的设计师也不会这么...
  • 子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用。继承还有一个重要的特性,父类对象可以引用子类实例。也就是子类实例可以赋值给父类的对象变量。 这个特性可以这样理解:儿子继承父亲...
  • 创建子类对象时,Student s = new Student("school"); 该构造方法中没有显示调用父类的 构造方法,但还是编译成功了,![图片说明](https://img-ask.csdn.net/upload/201604/14/1460599555_25628.png) 该构造方法...
  • 浅论创建子类对象时是否创建父类对象

    千次阅读 多人点赞 2018-09-08 11:51:57
    浅论创建子类对象时是否创建了父类对象 这仅仅是我个人的理解,因为是初学者,所有可能存在理解错误... 如果创建子类对象没有创建父类对象,那么我们子类继承过来的属性和通过super调用方法来自哪里? // 父类A ...
  • 答案是否定的,在Java中创建一个子类对象是不会创建父类对象的。 通过一个实例来证明:实例:父类Base.javapublic class Base { private String str; public Base() { System.out.println("Base()"); ...
  • 本人是刚学java的菜鸟,之前对“子类对象创建的同时有没有创建父类对象”这一问题非常纠结,于是上网查找各种资料,浏览前辈的博客,个人觉得子类对象创建的同时父类对象没有被创建。 如上图所示,子类...
  • 昨天写了一段代码,其中就出现了用子类创建父类对象,却调用不了子类方法的问题`import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...
  • 两个都调用,不过先调用父类构造函数,然后才调用子类构造函数。 所以一般在子类的构造函数中第一条语句就是调用父类构造函数,不过如果你没有在第一条语句显示地调用父类构造函数,那会自动先调用父类的默认无参...
  • 1、子类创建实例后,类初始化方法调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。这个地方我说的是初始化方法,而...
  • Father father = new Son(); 这样的吧,这有一种专业说法,叫“父类引用指向子类对象”。 首先 new Son();是肯定动态创建了一个子类对象的 。 Father father 则是一个创建了...这时候如果用father调用方法father,met...
  • 父类调用子类重写方法---------多态

    千次阅读 2019-08-23 16:51:59
    1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解java继承中的初始化机制)。...
  • java的父类声明new子类对象子类声明new子类对象

    千次阅读 多人点赞 2018-04-28 16:26:01
    父类名 a = new 子类名()子类名 b = new 子类名()a只能调用父类的函数,不能调用子类的函数,因为它没有继承b可以调用父类的函数也可以调用子类的函数但是对构造函数的执行上二者是没有区别的。...
  • 在java中,当创建一个子类对象会不会先创建父类对象?(如果父类是抽象类呢?) 提个问题:如果当创建一个子类对象会先创建父类对象的话,那么如果父类是抽象类的话,那该抽象父类也会被实例化喽,这与抽象类不能实例...
  • android端父类调用子类重写的方法

    千次阅读 2018-06-29 09:34:33
    看一段代码:public class main_class { public static void main(String[] args){ new c2(); } } class c1{ String name="... //父类构造函数 public c1(){ print(); } //该构造函数自始...
  • 父类引用指向子类对象,多态

    千次阅读 2016-08-31 20:30:03
    多态: 父类引用指向子类对象,即创建...如果想要调用子类特有的方法时需要向下转型,即将父类强制转化为子类然后对子类方法进行调用。class Animal{ private String name; private String sounds; public Animal()

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 267,312
精华内容 106,924
关键字:

创建父类对象调用子类方法