面向对象--多态、虚方法重写、抽象类、接口

多态:

一个父类有多个子类,每个子类都不尽相同

有了继承,才有了多态

虚方法:关键字 virtual

重写  override

  父类中的方法在子类中并不适用,那么子类需要自主更改继承的方法或是属性,

  父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字

fly.cs中:

namespace 多态
{
    public class fly
    {
        public virtual string fling()
        {
            return "拍翅膀飞";
        }
    }
}

plane.cs中:更改父类中的方法

namespace 多态
{
    public class plane:fly
    {
        public override string fling()
        {
            return "喷火飞";
        }
    }
}

program.cs中:

namespace 多态
{
    class Program
    {
        static void Main(string[] args)
        {
            plane p = new plane();
            Console.WriteLine(p.fling());
        }
    }
}

抽象类:

普通多态虚方法没有用本身的方法主体,便写成抽象类

抽象类就是来当亲父类,关键字abstract

抽象类中可以有抽象方法,关键字abstract

抽象方法一定在抽象类中,但抽象类中不一定只有抽象方法,也可以有普通方法

fly.cs中:一个抽象方法,一个普通方法

namespace 抽象类
{
    public abstract class Fly
    {
        public abstract string Fling();

        public string Eat()
        {
            return "吃小米";
        }
    }
}

bird.cs中:

namespace 抽象类
{
    public class Bird : Fly
    {
        public override string Fling()
        {
            return "拍拍翅膀就能飞!!";
        }
    }
}

program.cs中:

namespace 抽象类
{
    class Program
    {
        static void Main(string[] args)
        {
            Bird b = new Bird();
            Console.WriteLine(b.Fling());
            Console.WriteLine(b.Eat());
            Console.ReadLine();
        }
    }
}

接口:

接口就是用来作附属的父类的,不是亲父类,接口不是类,接口关键字 interface

接口编写方法格式: string 方法名();

实现接口的方法:不要override,直接正常编写就行了

1、吃饭,睡觉   -  基础类
2、技能,地点   -  赚钱类
3、娱乐1,娱乐2 - 娱乐类

jichu.cs中:抽象类

namespace 接口
{
    public abstract class JiChu
    {
        public abstract string ChiFan();

        public abstract string ShuiJiao();
    }
}

zhuanqian.cs中:接口

namespace 接口
{
    interface ZhuanQian
    {
        string JiNeng();
        string DiDian();
    }
}

yule.cszh:接口

namespace 接口
{
    interface YuLe
    {
        string YuLe1();
    }
}

nanren.cs中:

namespace 接口
{
    class NanRen : JiChu, ZhuanQian, YuLe
    {
        public override string ChiFan()
        {
            return "大口吃饭";
        }

        public override string ShuiJiao()
        {
            return "大字型睡";
        }

        public string JiNeng()
        {
            return "敲代码";
        }

        public string DiDian()
        {
            return "白宫";
        }

        public string YuLe1()
        {
            return "LOL";
        }
    }
}

program.cs中:

namespace 接口
{
    class Program
    {
        static void Main(string[] args)
        {
            NanRen nr = new NanRen();
            Console.WriteLine(nr.ChiFan());
            Console.WriteLine(nr.YuLe1());
            Console.WriteLine(nr.DiDian());
            Console.ReadLine();
        }
    }
}

越是子类功能越完善

时间: 2024-10-28 02:58:46

面向对象--多态、虚方法重写、抽象类、接口的相关文章

多态—虚方法、抽象类、接口

修饰符:public : 公共的,引用命名空间即可随意访问,访问权限最高:private : 私有的,只有在声明它的类和结构中才可以访问,访问权限最低: Internal : 内部的,同一个程序集中所有的类都可以访问,程序集就是命名空间, 访问权限次最高,这个访问修饰符是默认的:Protected : 受保护的,只能在他自己和自己的子类中才能访问. --------------------------------------------------------------------------

多态,虚方法重写,抽象类,接口

简而言之就是龙生九子,各有不同 有了继承,才有了多态 1.虚方法 virtual重写 override 父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写 子类重写父类的方法使用的是override关键字 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 多态 { public

虚方法重写

控制台程序 class Program { static void Main(string[] args) { DerivedType derivedInstance = new DerivedType(); string line; while ((line = Console.ReadLine()) != null) { Console.WriteLine("----"); } } } public class BadlyConstructedType { protected st

类与接口(五)java多态、方法重写、隐藏

一.Java多态性 面向对象的三大特性:封装.继承.多态. 多态的类型,分为以下两种: 编译时多态: 指的是 方法重载.编译时多态是在编译时确定调用处选择那个重载方法,所以也叫 静态多态,算不上真正的多态.所以,一般说的多态都是运行时的多态. 运行时多态: 由于 方法重写,所以想要确定引用变量所调用的方法的入口,必须根据运行时的引用变量所指向的实例对象来确定.从而使得同一个引用变量调用同一个方法,但不同的实例对象表现出不同的行为.再简单点来说,就是在运行时,可以通过指向基类的指针,来调用实现子类

Chapter 8. 面向对象(多态--虚方法)

namespace 多态 { public class Person { private string _name; public string Name { get { return _name; } set { _name = value; } } public Person(string name) { this.Name = name; } //虚方法 public virtual void SayHello() { Console.WriteLine("我是人类"); } }

虚方法、抽象类

虚方法: 1.virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑. 2.virtual方法可以直接使用,和普通方法一样 3.不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写 virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别 相应的 sealed关键字标示此方法不可以被重写 虚方法和抽象方法的区别: 1.虚方法可以有实现体,抽象方法不能

继承、多态及方法重写、重载

1.多态: 多态指的是同一个方法的调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现完全不同. 多态的要点: (1)多态是方法的多态,不是属性的多态(多态与属性无关): (2)多态的存在要有3个必要条件:继承.方法重写.父类引用指向子类对象: (3)父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了. /** * - - - (1)多态是方法的多态,不死属性的多态(多态与属性无关): * - - - (2)多态的存在要有3个必要条件:继承.方法重写.父类

JAVA 虚函数 抽象函数 抽象类 接口

1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为.如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数 PS: 其实C++和Java在虚函数的观点大同小异,异曲同工罢了. 2. Java抽象函数(纯虚函数) 抽象函数或者说是纯虚函数的存在是为了定义接口. C++中纯虚函数形式为:virtual void print(

面向对象概念中方法重写与重载的区别?

重载:重载一定是在同一个类当中,有一组方法名字相同,功能是类似的,但参数不同. 重写:在父子类当中,子类拥有与父类同名.同参.同返回类型的方法,可以改变父类的行为.父类加关键字virtual虚方法(为了在子类当中去重写父类的方法),子类中要加关键字override,体现了面向对象中的多态性(都不叫就不是方法的重写,而是方法的覆盖).