再谈多态,抽象类和接口

上一次博客已经概念性的概述了继承多态,抽象类和接口,这次来具体的谈一谈他们之间的联系和需要注意的地方。

一、继承和多态:Inheritance (继承) & Polymorphism(多态)

1、在父类中定义时:

创建的多态函数:注意使用virtual 关键字;

2、当子类实现父类并实现其特有的方法(覆盖父类的virtual方法)时:

注意使用override关键字

3、C#中的new关键字

   在子类中使用new关键字来声明方法,则说明此函数并不是override父类的方法

4、子类必须重新定义其自己的构造函数,父类的构造函数不被继承

如果想调用父类的构造函数或者函数,则需要使用base关键字

 5、几个访问修饰符的作用域

访问修饰符

被修饰元素访问限制

public

所有类都可访问

private

只有本类或本结构体重可以访问

protected

在本类或本结构体,或者在子类中可以被访问

internal

在同一个项目文件中可被访问

protected internal

在同一个项目文件或者其他项目文件中的子类中可被访问

二、抽象类(abstract class)

1、用abstract关键字声明抽象方法(方法隐式声明为virtual,且不能与static,virtual关键字混用)。

注意:在抽象类中也可以定义非抽象方法(即实现了内容的方法),当抽象类一定不能声明实体对象。

2、Abstract does force all the derived classes to implement the method, but nothing forces  the derived derived classes to implement its own method.

(即子类已经继承了父类,并且实现了其定义的抽象函数,则孙子类没必要继续override了)

3、与abstract class 对应的是sealed class(密封类)

密封类不允许被继承和派生

三、接口(interface)

1、接口的定义及使用时,注意:

  • 接口可以继续继承父接口从而产生新的接口
  • 定义的接口与抽象函数很像,但接口类里面所有方法必须全部是定义,而不能实现。
  • 接口中声明方法的定义时,不能加访问修饰符
  • 继承一个接口,则必须实现该接口中的所有方法!!!
  • 同一个类允许继承多个接口
  • 某个类继承接口实现其方法时允许添加virtual关键字,进而后续实现多态

 2、实现接口中的方法有两种;

隐式实现:访问修饰符   返回值类型  方法名{  ...  }

显示实现:返回值类型   接口名称 . 方法名{  ...   }    (注意:不能有访问修饰符)

且使用时:

lesson 4 再谈继承多态,抽象类和接口的更多相关文章

  1. Java入门系列之类继承、抽象类、接口(五)

    前言 C#和Java关于类.抽象类.接口使用方式基本相似,只是对应关键字使用不同罢了,本节呢,我们只是对照C#和Java中关于这三个概念在具体使用时,看看有哪些不一样的地方. 类继承 C#和Java在 ...

  2. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  3. soapUI 再谈SoapUI接口测试--文件组织与接口“布局”管理

    再谈SoapUI接口测试--文件组织与接口“布局”管理 by:授客 QQ:1033553122 SoapUI-Pro-x64-5.1.2_576025(含破解文件),软件下载地址: http://pa ...

  4. 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类

    ---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...

  5. 第四课 OOP封装继承多态解析,接口抽象类选择 2019-04-21

    父类 xx = new 子类(); xx.method(); 1 普通方法由编译时决定(左边) --- 提高效率 2 虚方法(virtual)  由运行时决定-- -多态,灵活 3 抽象方法由运行时决 ...

  6. python之路----继承的抽象类和接口类

    抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...

  7. Java 对象的继承,抽象类,接口

    子父级继承 关键字 extends 首先创建一个父类 class Fu { String name; int a=1; public void word() { System.out.println( ...

  8. 《Java技术》第三次作业--面向对象——继承、抽象类、接口

    1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Grandparen ...

  9. Java之继承、抽象类、接口篇

    一.继承(extends) 什么是继承? 继承是对现实生活中的"分类"概念的一种模拟. 狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是"继承" ...

随机推荐

  1. java加密用到了BASE64Decoder时报错信息:Access restriction: The type BASE64Encoder is not accessible due to restrict

    在Eclipse中编写Java代码时,用到了BASE64Decoder,import sun.misc.BASE64Decoder;可是Eclipse提示: Access restriction : ...

  2. VINS紧耦合优化公式及代码解析

    1.首先确定待优化的状态变量 对应代码,优化参数为: Vector3d Ps[(WINDOW_SIZE + )];(平移向量) Vector3d Vs[(WINDOW_SIZE + )];(速度) M ...

  3. 面试官常问的10个Linux问题

    1.如何暂停一个正在运行的进程,把其放在后台(不运行)? 为了停止正在运行的进程,让其再后台运行,我们可以使用组合键Ctrl+Z. 2.什么是安装Linux所需的最小分区数量,以及如何查看系统启动信息 ...

  4. Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录 1.二级缓存的具 ...

  5. Mysql自学笔记

    SQL(strucut query language) DDL (数据库定义语言)DML (数据库操作语言)DCL (数据库的控制语言)DTL (数据库的高级语言)查看版本的函数select vers ...

  6. Accept 惊群现象测试perl脚本

    $uname -a Linux debian-11-34 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 G ...

  7. EntityFramewrok 使用

    1.使用一些查询比较复杂或者需要拼接的查询的时候最好一直保持IQueryable.一直到最后取数据的时候才进行查询.例如分页之类的条件拼接. var query = dbset.Where(expre ...

  8. 《python核心编程第二版》第4章习题

    4–1. Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的

  9. JMeter学习笔记(九) 参数化4--User Variables

    4.User Variables 用户参数 1)线程组右键添加 -> 前置处理器 -> 用户参数 2)配置用户参数 3)添加HTTP请求,引用用户参数,格式: ${} 4)配置线程数 5) ...

  10. Django2.1.3框架中(fields.E300)和(fields.E307)报错处理

    使用Django框架创建了Web项目,修改了模型models.py之后,执行数据库迁移操作,出现如下报错: models.py内容如下: from django.db import models fr ...