精华内容
下载资源
问答
  • 父类调用子类方法

    2020-04-01 14:47:11
    父类调用子类方法 子类可能会在父类的基础上增加一些方法。 简单工厂模式中,会创建出子类然后将子类的指针赋给父类。 // Factory.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<...

    父类调用子类方法

    子类可能会在父类的基础上增加一些方法。
    简单工厂模式中,会创建出子类然后将子类的指针赋给父类。

    // Factory.cpp : 定义控制台应用程序的入口点。
    //
     
    #include "stdafx.h"
    #include<iostream>
     
    using namespace std;
     
    class Product
    {
    public:
        virtual void show() = 0;  
    };
     
    class Product_A : public Product
    {
    public:
        void show()
        {
            cout << "Product_A" << endl;
        }
    };
     
    class Product_B : public Product
    {
    public:
        void show()
        {
            cout << "Product_B" << endl;
        }
    };
     
    class Factory
    {
    public:
        Product* Create(int i)
        {
            switch (i)
            {
            case 1:
                return new Product_A;
                break;
            case 2:
                return new Product_B;
                break;
            default:
                break;
            }
        }
    };
     
    int main()
    {
        Factory *factory = new Factory();
        factory->Create(1)->show();
        factory->Create(2)->show();
        system("pause");
        return 0;
    }
    
    

    如果子类中增加了一些父类没有的接口,那么,基类指针就不能直接调用子类特有的接口。
    这里可以将父类指针转化为子类指针。

    using namespace std;
    
    class Base
    {
    public:
        void  virtual   Func()
        {
            cout << "Base Func\n";
        }
    };
    class Child :public Base
    {
    public:
        void Func()
        {
            cout << "Child Func\n";
        }
        void NewFunc()
        {
            cout << "Child Newfunc\n";
        }
        int number = 10;
    
    };
    //测试用例
    int main()
    {
        Base* b = new Child;//先将子类new出来,给父类
        b->Func();//输出Child Func
        Child* c_1 = dynamic_cast<Child*>(b);
        cout << c_1->number << endl;
        c_1->number = 1;
        Child* c_2 = dynamic_cast<Child*>(b);
        cout << c_2->number << endl;
        return 0;
    }
    

    在这里插入图片描述

    展开全文
  • Java多态之父类调用子类方法//多态的体现import javax.print.attribute.standard.RequestingUserName;import java.util.Scanner;public class testfather {public static void main(String[] args){Animal a = new...

    package test1;

    Java多态之父类调用子类的方法//多态的体现

    import javax.print.attribute.standard.RequestingUserName;

    import java.util.Scanner;

    public class testfather {

    public static void main(String[] args)

    {

    Animal a = new fish(); //父类对象被赋以子类类型

    /*Animal a;

    fish b = new fish b;

    a= b

    ; //向上转型,不丢失精度

    a.talk();*/ //可达到相同效果

    a.talk(); //fish覆写animal talk方法

    Animal c = new bird();

    //C.talk2(); //不能实现,因为animal中没有此方法,必须向下转型

    bird b = (bird)c; //如果不进行转换,父类无法看到子类新扩充的方法

    b.talk2();

    }

    }

    class Animal

    {

    public void talk() //如果父类方法不想被覆写,可改为public

    static

    void talk()

    {

    System.out.println("walk");

    }

    }

    class fish extends Animal

    {

    public void talk()

    {

    System.out.println("swim");

    }

    }

    class bird extends Animal

    {

    public void talk()

    {

    System.out.println("fly");

    }

    public void talk2()//父类中没有此方法,调用必须进行强制转换,向下转型。

    {

    System.out.println("i am a bird");

    }

    }

    展开全文
  • 父类 FatherClasspackage 父类子类方法调用顺序;/*** 父类* @author shundong**/public class FatherClass {private int i =0;private String name;/*** 父类无参构造*/FatherClass(){System.out.println("--父类...

    72179caa5bbd6312193e3f4def916f42.png

    父类 FatherClass

    package 父类与子类方法调用顺序;

    /**

    * 父类

    * @author shundong

    *

    */

    public class FatherClass {

    private int i =0;

    private String name;

    /**

    * 父类无参构造

    */

    FatherClass(){

    System.out.println("--父类无参构造--");

    }

    /**

    * 父类带参构造

    * @param name

    */

    FatherClass(String name){

    this.name=name;

    System.out.println("--父类带参构造--"+this.name);

    }

    /**

    * 父类静态代码块

    */

    static{

    System.out.println("--父类的静态代码块--");

    }

    /**

    * 父类非静态代码块

    */

    {

    ++i;

    System.out.println("--父类的非静态代码块--"+i);

    }

    /**

    * 父类的方法

    */

    public void speak(){

    System.out.println("--父类的方法--");

    }

    //加入一个main程序后

    public static void main(String[] args) {

    System.out.println("--父类主程序--");

    FatherClass father=new FatherClass("父类");

    father.speak();

    }

    }

    结果:

    b20815a18eef1fcdcf18e69b5ea380fd.png

    子类 SonClass

    package 父类与子类方法调用顺序;

    /**

    * 子类

    * @author shundong

    *

    */

    public class SonClass extends FatherClass {

    private String name;

    /**

    * 子类无参构造

    */

    SonClass(){

    System.out.println("--子类无参构造--");

    }

    /**

    * 子类带参构造

    * @param name

    */

    SonClass(String name){

    this.name=name;

    System.out.println("--子类带参构造--"+this.name);

    }

    /**

    * 子类静态代码块

    */

    static{

    System.out.println("--子类静态代码块--");

    }

    /**

    * 子类的非静态代码块

    */

    {

    System.out.println("--子类的非静态代码块--");

    }

    /**

    * 重写父类方法

    */

    @Override

    public void speak(){

    System.out.println("--子类重写(Override)了父类的方法--");

    }

    //然后再加入一个main函数

    public static void main(String[] args) {

    System.out.println("--Main主程序调动--");

    FatherClass father=new FatherClass("父亲");

    father.speak();

    SonClass son=new SonClass("儿子");

    son.speak();

    }

    }

    结果

    1457e4d27fd399af4aa0aa94f871dc4c.png

    展开全文
  • 父类能调用子类的方法吗?答:能。...● 父类调用子类的静态方法。案例展示:package com.ywq;public class Test2{public static void main(String[] args){Son son = new Son();Father father=new...

    父类能调用子类的方法吗?

    答:能。

    怎么做?

    ● 把子类传递到父类的有参构造中,然后调用。

    ● 使用反射的方式调用,你使用了反射还有谁不能调用的?!

    ● 父类调用子类的静态方法。

    案例展示:

    package com.ywq;

    public class Test2{

    public static void main(String[] args)

    {

    Son son = new Son();

    Father father=new Father(son);

    father.fun1();

    father.fun4();

    }

    }

    class Father{

    public Son son;

    public Father(Son son){

    this.son=son;

    }

    public Father() {

    }

    public void fun4(){

    //方法3:使用反射的方式调用子类方法

    try {

    Class cls=Class.forName("com.ywq.Son");

    Son son=(Son) cls.newInstance();

    son.fun2();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public void fun1(){

    //方法1:把子类传递到父类的有参构造函数中,然后调用。

    System.out.println("我是父类的方法");

    son.fun2();

    //方法2:父类调用子类的静态方法。

    Son.fun3();

    }

    }

    class Son extends Father{

    public static void fun3(){

    System.out.println("我是子类的静态方法");

    }

    public void fun2(){

    System.out.println("我是子类的方法");

    }

    }

    这三种都是父类直接调用子类的方法,

    好用不?好用!

    解决问题了吗?解决了!

    项目中允许使用不?不允许!

    我就一直没有搞懂为什么要用父类调用子类的方法。如果一定要调用子类,那为什么要继承它呢?搞不懂。其实这个问题可以换个角度去理解,父类建立框架,子类在重写了父类部分的方法后,再调用从父类继承的方法,产生不同的结果(而这正是模板方法模式)。这是不是也可以理解为父类调用了子类的方法呢?你修改了子类,影响了父类行为的结果,曲线救国的方式实现了父类依赖子类的场景,模板方法模式就是这种效果。

    ---------------------

    作者:温柔狠角色

    原文:https://blog.csdn.net/qq_25827845/article/details/52916513

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

    千次阅读 2014-11-12 12:13:59
     * 父类调用子类方法 基类   * @author ikmb   *   */  class Base {   /**   * 调用子类方法   * @author ikmb email:ikmb@163.com   * @version 创建时间:2011-7-8 下午...
  • php 父类调用子类方法

    万次阅读 2011-07-08 23:23:42
    /** * 父类调用子类方法 基类 * @author ikmb * */ class BaseApp { /** * 调用子类方法 * @author ikmb email:ikmb@163.com * @version 创建时间:2011-
  • 今天遇到了这样一个问题,通过重载方法来设置不同的字段值, 而这个设置方法对于类外部来说...结果在调用的时候,始终调用的是父类方法而不是子类重载的方法, 如下例: class A(): def __init__(self): ...
  • Python 父类调用子类方法

    千次阅读 2017-11-20 17:23:27
    class father(): def call_children(self): child_method = getattr(self, 'out')# 获取子类的out()方法 child_method() # 执行子类的out()方法class children(father): def out(self): print "hehe"ch
  • 我们可以通过参数将子类传递给父类,实现在父类调用子类方法。 实现方式有两种: 一、 基于接口 定义接口,父子类都实现接口,父类方法接收接口类型参数 特点: 结构简单,思路清晰。 基于接口,轻松应对多级继承...
  • php父类调用子类方法

    千次阅读 2016-08-19 16:39:39
    class a { public function geta() { $str = $this->getstr($msg); return "class a and ".$msg; } public function getstr(&$msg){} ...多重继承,子类调用父类方法,父类调用子类方法
  • Python 父类调用子类方法、属性!

    千次阅读 2019-06-27 21:46:20
    A_class.py # _*_ coding:utf-8 _*_ class base(): def step(self): ...个人觉得可能是初始化父类传入的self是子类实例,导致父类执行self.xx的时候调用的是子类方法和、属性吧。 不明其原理,望指教。
  • 父类 ``` public class Father { public Father(){ protected_method(0); protected_method(1); } public Integer protected_method(int i){ Integer integer= new Integer(i); return ...
  • 父类和子类的相互转换及父类调用子类方法 父类转换为子类的前提条件是:父类引用指向子类; Parent p=new Son() Son s=(Son)p; –正确 Parent p=new Parent() Son s=(Son)p; –错误搜索 根本原因:因为继承的...
  • !... 我现在有这几个类,A B1 B2是接口,A是B1 B2的父类,B1 B2是C1 C2父类, 现在我用A a = new C1(); (a as C1).... 可以调用子类方法。如果父类不转为子类,还有什么方法父类可以访问到子类的方法。
  • 文章开始前,我们先抛出一个链式问题:Java中父类调用子类方法吗?如果不可以,原因?如果可以,如何做?每种实现方式,在实际项目被允许吗?不被允许的原因有哪些?如果在实际项目中,的确有这样的特殊业务场景...
  • c#中 父类调用子类的属性、方法

    千次阅读 2016-08-17 17:50:08
    我们习惯认为,子类对父类是不可见的,或者说父类不知道子类的存在,所以父类是调用不到子类的方法、属性的,以下这种方式,可以实现父类调用子类属性、方法的功能,欢迎拍砖。。。   public class ...
  • 在spring的设计中 上层HttpServletBean的init 方法中会调用 子类FrameworkServlet 的方法 initServletBean 方法 涉及到的就是父类只想子类方法父类方法package com.baiwang.UtilsTest.fatherinvokSon; public ...
  • PHP父类调用子类的protected方法

    千次阅读 2017-05-22 20:52:25
    public 表示全局,类内部外部子类都可以访问; private表示私有的,只有本类内部可以使用; protected表示受保护的,只有本类内部或子类内部或父类内部可以访问;...//父类内部调用子类的protected方法
  • 1.Java中父类调用子类方法吗? 答案:能 1.1 实现方式描述 (1)父类中的抽象方法让子类实现并返回 (2)通过注册监听,然后通过回调接口调用子类相关方法 (3)在父类中通过反射调用子类的相关方法 (4)在...
  • 在java中父类调用子类中的方法

    千次阅读 2013-06-16 22:28:33
    main方法中是可以的,父类是不能调用子类方法的。从面向对象上来说吧。 父类先于子类存在,子类从父类中生出来,所以子类知道父类,可以调用父类方法。但父类不知道子类,子类可以任意的出生,只要你愿意,所以...
  • /* 多态 1.没有继承就没有多态 ...1》父类类型的变量,不能直接调用子类特有的方法,必须强转为子类类型变量后,才能直接调用子类特有的方法 Animal*aa = [Catnew]; // Animal是父类 Cat是子类 Cat*dd...
  • python 在父类中如何去调用子类里面得函数方法呢? 如下: 用 getattr class father(): def call_children(self): child_method = getattr(self, 'out')# 获取子类的out()方法 child_method() # 执行子类的out()...
  • Java父类子类方法调用顺序 父类 FatherClass package 父类子类方法调用顺序; /** * 父类 * @author shundong * */ public class FatherClass { private int i =0; private String name; /** * 父类无参...
  • 前台界面的所有按钮点击后都会进入一个NCAction的doaction方法,然后会根据不同的按钮进入不同的子类的doaction,这是什么原理
  • Java父类调用子类

    2015-06-05 14:42:13
    因为父类根本不知道是谁要继承自己,所以一般情况下不能调用子类,但还是有特殊的情况.package com.skymr.learn; /** * 父类调子类方法 * @author skymr * */ public class SubParentTest extends ParentClass{...
  • 父类调用子类重写方法---------多态

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,693
精华内容 7,877
关键字:

父类调用子类方法