四-面向对象 -多态、接口 is、as运算

多态:
有了继承,才有了多态;
概念:继承同一个父类的全部子类,使用起来都不一样,他们都是一个独立的个体;

普通父类中,可以出现虚方法,虚方法可以在子类中被重写;

虚方法:virtual
重写:override

父类,基类
子类,派生类,超类

namespace 多态
{
    class Ren
    {
        public void chifan()
        {
            Console.WriteLine("我必须得吃饭!");
        }

        public virtual void xihuanchi()  -----虚方法
        {
            Console.WriteLine("喜欢吃肉,蔬菜,水果!");
        }

    }
}

namespace 多态
{
    class Nan : Ren
    {
        public override void xihuanchi()   ---=--重写
        {
            Console.WriteLine("我是男人,我只喜欢吃肉!");
        }

        public void zuqiu()   --------子类拥有,父类没有的方法
        {
            Console.WriteLine("我喜欢足球!");
        }
    }


namespace 多态
{
    class Nv : Ren
    {
        public override void xihuanchi()
        {
            Console.WriteLine("我是女人,我只喜欢吃蔬菜和水果!");
        }

        public void gouwu()
        {
            Console.WriteLine("我喜欢购物!");
        }

    }
}

namespace 多态
{
    class XiaoNanHai : Nan     --------子类可以被另一子类继承
    {
    }
}
 

------------------------------------------------------------------
抽象类:abstract
就是用来被继承的,不能实例化对象,因为没有构造函数;
抽象方法,不能有方法的主体,只能定义方法的结构;

抽象方法或抽象属性,只能存在于抽象类中;
抽象类中不一定只有抽象方法和抽象属性;

namespace 抽象类
{
    class Program
    {
        static void Main(string[] args)
        {
            Nan n = new Nan();  -----就是用来被继承的,不能实例化对象,因为没有构造函数;抽象方法,不能有方法的主体,只能定义方法的结构;
            n.chifan();
            n.xihuanchi();

            Ren r = new Nan();
            r.xihuanchi();

            Console.ReadKey();
        }
    }

namespace 抽象类
{
    abstract class Ren     ----抽象类
    {
        public virtual void chifan()-----就是用来被继承的,不能实例化对象,因为没有构造函数;抽象方法,不能有方法的主体,只能定义方法的结构;

{ Console.WriteLine("用嘴吃饭!"); ------抽象类中不一定只有抽象方法和抽象属性;
} public abstract void xihuanchi(); -------抽象方法或抽象属性,只能存在于抽象类中;
    }
}


namespace 抽象类
{
    class Nan : Ren
    {
        public override void chifan()    ----继承时要定义方法
        {
            Console.WriteLine("我是男人,我大口吃饭!");
        }

        public override void xihuanchi()
        {
            Console.WriteLine("我是男人,我喜欢吃肉!");
        }

    }
}

 

-----------------------------------------------------------------
接口:
在团队开发中,一个类,需要多个模块组合起来才是完整的类;
多个人开发不同的模块,最后要把它们拼接起来,靠的就是接口;

一个类,需要继承多个类才是完整的,但是程序规定,一个类只能继承一个父类;
为了解决这个问题,就出现了接口,一个类可以继承无数个接口;

=========就像一个子类继承了多个父类

人 这个类,需要会吃饭,技能,运动,才是一个完整的人;
吃饭这个功能是A单独开发的,作为人的最基本的父类,使用的是抽象类;
技能和运动,是B和C分别开发的,需要人这个类来继承,但是已经有父类了;
那么B和C就使用的接口,来让人这个类可以继承他们写的两个功能模块;

接口里面的方法很像抽象方法;

接口也是起到一个规范和约束的作用;

namespace 接口
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList arr = new ArrayList();

            Ren r = new Ren();
            //r.chifan();
            //r.Skill();
            //r.Sport1();

namespace 接口
{
    abstract class HuoZhe
    {
        public abstract void chifan();

    }


namespace 接口
{
    public interface Sports
    {
        void Sport1();
    }
}

namespace 接口
{
    public interface Work
    {
        void Skill();
    }
}

namespace 接口
{
    class Ren : HuoZhe, Work, Sports
    {
        public override void chifan()
        {
            Console.WriteLine("用嘴吃饭!");
        }

        public void Skill()
        {
            Console.WriteLine("会编程!");
        }

        public void Sport1()
        {
            Console.WriteLine("会踢足球!");
        }

 

------------------------------------------------------------------------------------------------
is和as运算符:
is是判断是否是某个类型,返回true或false
o as Ren; 如果转换成功了,没问题;
如果没转换成功,不会报出错误,而是返回一个null值

====就是防止 强制转换失败 程序崩溃 而设立的一种方法

           Random ran = new Random();

            arr.Add(r);
            arr.Add(ran);

            foreach (object o in arr)
            {
                Ren rr = o as Ren;
                if (rr != null)
                {
                    rr.chifan();
                }
                else
                {
                    Console.WriteLine("没转换成功!");
                }
            }

            Console.ReadKey();
        }
    }

时间: 2024-10-23 16:13:43

四-面向对象 -多态、接口 is、as运算的相关文章

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

面向对象多态之接口

申明下:我也是新手,以下如有不对或不合适的地方望指出,一起交流O(∩_∩)O哈! 好了,转入正题 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Interface 7 { 8 class InterfaceTest 9 { 10 static void Main(string[] args) 11 { 12 #region 测试

面向对象编程(十四)——面向对象三大特性之多态②

面向对象最核心的机制——动态绑定,也叫多态. 通过下面的例子理解动态绑定,即多态 1 package javastudy.summary; 2 3 class Animal { 4 /** 5 * 声明一个私有的成员变量name. 6 */ 7 private String name; 8 9 /** 10 * 在Animal类自定义的构造方法 11 * @param name 12 */ 13 Animal(String name) { 14 this.name = name; 15 } 16

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

09.面向对象多态的概述及其代码体现

09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic [,p?l?'m??f?k])概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案例演示 代码体现多态 案例: class Demo1_Polymorphic { public static void main(String[] args) { Cat c = new Cat();//猫是一只猫 c.eat(); Animal a = new Cat

转:OC面向对象—多态

OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. Animal类的声明 Animal类的实现 Dog类继承自Animal类 Dog类的实现 测试程序: 二.使用注意 代码分析: Dog *d=[[Animal  alloc] init];   动物是一条狗?语义正确吗? NSString *str=[Dog  new];     狗是一个字符串?

OC面向对象-多态

OC面向对象-多态 一.基本概念 1>多态在代码中的体现,即为多种形态,没有继承就没有多态 2>在使用多态时,会进行动态检测,以调用真实的对象方法 3>多态在代码中的体现即父类指针指向子类对象 Animal类的声明 #import <Foundation/Foundation> //声明一个Animal类,该类继承自NSObject @interface Animal : NSObject //在Animal类中声明一个eat的对象方法 -(void) eat; @end A

黑马程序猿-面向对象-多态

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>.<a href="http://edu.csdn.net"target="blank">.Net培训</a>.期待与您交流! ---------------------- 一多态的前提:(1)要有继承关系(或

黑马程序员-面向对象-多态

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>.<a href="http://edu.csdn.net"target="blank">.Net培训</a>.期待与您交流! ---------------------- 一多态的前提:(1)要有继承关系(或