c#多态之抽象类与接口的一点收获~~

多态之抽象类与接口的相似点及不同点,刚学习的一点收获,或许不是很完整,借鉴看视频及一些被人写的文章自己写的下的一些心得!以便之久复习使用!

一、抽象类

(1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法
    (2) 抽象类不能被实例化
    (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
    (4) 具体派生类必须覆盖基类的抽象方法
    (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。如:

using System;

public abstract class A //抽象类A
{
    private int num=0;

public int Num //抽象类包含属性
    {
        get
        {
            return num;
        }
        set
        {
            num = value;
        }
       
    }

public virtual int getNum() //抽象类包含虚方法
    {
        return num;
    }

public void setNum(int n) // //抽象类包含普通方法
    {
        this.num = n;
    }

public abstract void E(); //类A中的抽象方法E
   
}

public abstract class B : A //由于类B继承了类A中的抽象方法E,所以类B也变成了抽象类
{
   
}

public class C : B
{
    public override void E() //重写从类A继承的抽象方法。如果类B自己还定义了抽象方法,也必须重写
    {
        //throw new Exception("The method or operation is not implemented.");
    }
}

public class Test
{
    static void Main()
    {
        C c = new C();
        c.E();
    }
}

二、接 口

(1) 接口不能被实例化
    (2) 接口只能包含方法声明
    (3) 接口的成员包括方法、属性、索引器、事件
    (4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。如:

public delegate void EventHandler(object sender, Event e);

public interface ITest
{
    //int x = 0;

int A
    {
        get;
        set;
    }

void Test();

event EventHandler Event;
   
    int this[int index]
    {
        get;

set;
    }
}

(5) 接口中的所有成员默认为public,因此接口中不能有private修饰符
    (6) 派生类必须实现接口的所有成员
    (7) 一个类可以直接实现多个接口,接口之间用逗号隔开
    (8) 一个接口可以有多个父接口,实现该接口的类必须实现所有父接口中的所有成员

三、抽象类和接口
    相同点:
    (1) 都可以被继承
    (2) 都不能被实例化
    (3) 都可以包含方法声明
    (4) 派生类必须实现未实现的方法
    区 别:
    (1) 抽象基类可以定义字段、属性、方法声明。接口只能定义属性、索引器、事件和方法声明,不能包含字段。
    (2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接口总是后带able字段,证明其是表述一类“我能做~~”
    (3) 接口可以被多重实现,抽象类只能被单一继承
    (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中
    (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性
    (6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法   
    (7) 接口可以用于支持回调,而继承并不具备这个特点
    (8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
    (9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

如果有错漏,敬请大家回复,纠错,补充!

时间: 2024-10-14 10:05:45

c#多态之抽象类与接口的一点收获~~的相关文章

面向对象 多态、抽象类和接口

今天,我主要学习了多态.抽象类和接口的部分内容. 在实际的操作中,同样都是继承了同一个父类,但是父类中的方法并不适用任何一个子类,那么在这就需要子类重新编写这个方法的主体. 在重写成员方法时,需要父类同意子类可以重新编写自己的方法:virtual -  虚方法:子类只能重写父类允许重写的方法,只能重写虚方法:override - 重写覆盖虚方法. 基类与派生类是相对的,所有的类都可以当做父类,都可以有虚方法. 抽象类:abstract 抽象类就是为了被继承而出现的.普通的类中所有的方法都变成虚方

多态、抽象类、接口_DAY09

1:多态(掌握) (1)多态概念:一种事物的多种形态 (2)体现:父类的引用指向其子类的实例对象;接口的引用指向其实现类的实例对象 (3)特点: 成员方法:编译看左边,运行看右边 运行:子类重写的方法运行 编译:父类的引用类型必须有该方法 成员变量:编译看左边,运行看左边 运行:访问的为父类的属性 编译:父类的引用类型必须有该属性 总结:只有在方法调用的时候,才会判断子类是否重写,重写调用子类方法.其他情况均看父类类型 记忆方法:方法运行看右边,其他看左边 例子: /* 多态: 一种事物的多种形

面向对象_多态_抽象类_接口

09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案例演示 代码体现多态 public class Demo1_polymorphic { /** * 成员变量:编译时看左边(父类),运行时看左边(父类) * 成员方法:编译时看左边(父类),运行时看右边(子类) * @param args */ public static void main(Str

关于JAVA继承、多态、抽象类、接口等性质的学习(3)

抽象类:abstract class 接口:interface 在java的类中,只要有一个方法为抽象方法,那么该类就是抽象类.换句话说,抽象类可以提供部分方法的具体实现,这一点在接口中是不被允许的. 接口中,只能够有方法的定义,而不能有方法体. 关于抽象类和接口,很容易看出来它们并不能对对象进行实例化操作,那么它们的唯一存在意义就是拿来继承用的.假如说一个继承了抽象类的类,如果没有将父类的抽象方法全部实现,那么它仍然是一个抽象类. 抽象类中的抽象方法必须是public或者protect的(默认

Java_Day09(final,多态,抽象类,接口)

1:final关键字(掌握)    (1)是最终的意思,可以修饰类,方法,变量.    (2)特点:        A:它修饰的类,不能被继承.        B:它修饰的方法,不能被重写.        C:它修饰的变量,是一个常量.    (3)面试相关:        A:局部变量            a:基本类型 值不能发生改变            b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的        B:初始化时机            a:只能初始化一次. 

对抽象类和接口的一点认识

假设一个非抽象子类继承一个抽象父类,它必须实现父类中的抽象方法,假设子类也是抽象类,那么则不必实现父类中的抽象方法. 假设一个类实现了一个接口.那么必须实现接口中的全部方法.可是子类是抽象类则不用. 比方说一个接口,你仅仅用到当中的一两个方法,但是假设直接实现接口须要实现里面的五个方法.这时候你能够先让抽象类实现接口,然后你的类继承接口.就不须要都实现接口的方法了. 并且接口的抽象层次要更高.是一种契约,抽象类是提供了非常多的方法.给你用,没有强制性. 接口是公开的,里面不能有私有的方法或变量,

java类的继承,多态,抽象类与接口

知识点梳理:     1,怎样定义自己的类. MyStarFrame,MyStarPanel 类中定义: (1)属性(数据),变量. (2)方法(函数),行为. (3)构造方法(特征,作用,何时被调用,构造方法怎么写). 2,继承自已经存在的类.(API,自己写的).  写继承: public class A extends B{     /**方法的覆盖,重写      * 父类中有同名同参的方法.     */       public void paint(){   } /**扩展的新方法

黑马程序员(Java)----面向对象(多态、抽象类、接口)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 3.7 多态 3.7.1.理解多态 多态可以理解为事物存在的多种体现形态.例如下面的代码: Cat c = new Cat(); Animal a = new Cat(); 建立一个猫的对象,可以用猫这个类引用,也可以用动物这个类引用. 3.7.2.多态的前提 1.类与类之间必须有关系,要么继承,要么实现. 2.存在覆盖.父类中有方法被子类重写(其实没有也是可以的,但是如果没有这个就没有意义)

Java中多态、抽象类和接口

1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: A:局部变量 a:基本类型 值不能发生改变 b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的 B:初始化时机 a:只能初始化一次. b:常见的给值 定义的时候.(推荐) 构造方法中. 2:多态(掌握) (1)同一个对象在不同时刻体现出来的不同状态. (2)多态的前提: A:有继承或者实