c#父类对象引用指向子类与方法重写

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace csharp_test
{
    class Parentclass
    {
        public Parentclass()
        {
            Console.WriteLine("this is parentclass‘s cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is parent ‘s print");
        }
    }

    class Childclass : Parentclass
    {
        public Childclass()
        {
            Console.WriteLine("this is childclass‘s cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is child ‘s print");
        }

        static void Main(string []args)
        {
            Parentclass p = new Parentclass();
            p.print();
            Parentclass c = new Childclass();
            c.print();
        }
    }
}

this is parentclass‘s cunstructor
this is parent ‘s print
this is parentclass‘s cunstructor
this is childclass‘s cunstructor
this is parent ‘s print
运行结果如上,可见,如果声明一个父类对象指向子类对象,会调用父类的方法。

如果将子类的print方法删除,仍然会调用父类的方法,但是如果删除父类的方法,就会报错。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace csharp_test
{
    class Parentclass
    {
        public Parentclass()
        {
            Console.WriteLine("this is parentclass‘s cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is parent ‘s print");
        }
    }

    class Childclass : Parentclass
    {
        public Childclass()
        {
            Console.WriteLine("this is childclass‘s cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is child ‘s print");
        }

        static void Main(string []args)
        {
            Parentclass p = new Parentclass();
            p.print();
            Childclass c = new Childclass();
            c.print();
        }
    }
}

this is parentclass‘s cunstructor
this is parent ‘s print
this is parentclass‘s cunstructor
this is childclass‘s cunstructor
this is child ‘s print

运行结果如上,可见,如果声明子类对象指向子类对象,会调用子类的方法。

如果删除了子类方法,那么就会自动调用父类的print方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace csharp_test
{
    class Parentclass
    {
        public Parentclass()
        {
            Console.WriteLine("this is parentclass‘s cunstructor");
        }

        public virtual void print()
        {
            Console.WriteLine("this is parent ‘s print");
        }
    }

    class Childclass : Parentclass
    {
        public Childclass()
        {
            Console.WriteLine("this is childclass‘s cunstructor");
        }

        public override void print()
        {
            Console.WriteLine("this is child ‘s print");
        }

        static void Main(string []args)
        {
            Parentclass p = new Parentclass();
            p.print();
            Parentclass c = new Childclass();
            c.print();
        }
    }
}

this is parentclass‘s cunstructor
this is parent ‘s print
this is parentclass‘s cunstructor
this is childclass‘s cunstructor
this is child ‘s print

结果如上所示,如果子类重写了父类的方法,那么尽管父类是指向子类的,但是仍然会调用子类的方法。

原文地址:https://www.cnblogs.com/huangshizhou/p/9968269.html

时间: 2024-11-09 05:46:22

c#父类对象引用指向子类与方法重写的相关文章

java父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

【转】父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

父类引用指向子类对象

1 public class Test { 2 /** 3 * 对于多态,可以总结它为: 4 5 一.使用父类类型的引用指向子类的对象: 6 7 二.该引用只能调用父类中定义的方法和变量: 8 9 三.如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法:(动态连接.动态调用) 10 11 四.变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错. 12 13 多态的3个必要条件: 14 15 1.继承 2.重写

理解父类引用指向子类对象

java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时:   Animal a = new Cat(); 这代表什么意思呢? 很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向C

关于父类引用指向子类对象

例如: 有以下2个类 public class Father { public int age = 70; public static string name = "父亲"; } public class Son : Father { public int age = 30; public static string name = "儿子"; } Father f=new Son(); 这种用法叫做“父类引用指向子类对象,或者叫“父类指针指向子类对象”,指的是定义一

深入了解父类引用指向子类

父类应用指向子类对象指的是: 父类Animal,子类 Cat,Dog.其中Animal可以是接口或类,Cat和Dog是继承或实现Animal的子类. Animal animal= new Cat(); 声明的为父类,实际指向的是子类对象.我们先从内存角度理解. 假设Aninal父类,它里面的变量需要占用1M,它的子类Dog和Cat,需要占用0.5M内存. 通过代码看内存分配: Animal animal=newAnimal();//系统将分配内存1M Catcat = new Cat();系统将

java多态,如何理解父类引用指向子类对象

摘录 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时:   Animal a = new Cat(); 表示定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的. 那么这样做有什么意义呢?因为子类是对父类的一个改进

父类引用指向子类对象--面向对象的多态

先上代码 package com.fuzi.demo; public class FuZi { public static void main(String[] args) { FuLei fuLei = new ZiLei(); fuLei.print_info(); } } class FuLei { public void print_info() { System.out.println("父类的print_info"); System.out.println(this.get

当父类指针指向子类对象时的函数调用

class A { public: void FuncA() { printf( "FuncA called\n" ); } virtual void FuncB() { printf( "FuncB called\n" ); } }; class B : public A { public: void FuncA() { A::FuncA(); printf( "FuncAB called\n" ); } virtual void FuncB(