抽象方法

C# 之抽象类和抽象方法

半世苍凉 提交于 2020-01-17 01:09:05
概述:abstract 关键字 抽象类不能被实例化,抽象方法不能有方法体,抽象类中的所有抽象方法必须在子类中重写( override ), 一个抽象类可以同时包含抽象方法和非抽象方法。 abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。 在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。 抽象类具有以下特性: 抽象类不能实例化。 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。 抽象方法具有以下特性: 抽象方法是隐式的 virtual 方法。 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod(); 实现由 overriding 方法提供,它是非抽象类的成员。 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。 在静态属性上使用 abstract 修饰符是错误的。 在派生类中,通过包括使用

抽象类与抽象方法

二次信任 提交于 2020-01-17 01:07:37
抽象类是否至少要有一个抽象方法,我查了很多资料,结果都是:“抽象类允许(但不要求)抽象类包含抽象成员”。但是一个抽象类里不写抽象方法就没有意义了,既然如此,还不如直接写个普通类? 在一个抽象类里可以不声明抽象方法,这在语法上是没问题的,但实际来说,这样是没有任何意义的。也就是说,你为什么会选择写一个抽象类呢?当然是为了想某个方法能够被 OVERRIDE,以实现多态。后来查找 MSDN 结果如下: abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。 在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。 【抽象类】具有以下特性:  抽象类不能实例化。  抽象类可以包含抽象方法和抽象访问器。  不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。  从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。在方法或属性声明中使用 abstract 修饰符以指示此方法或属性 不包含实现。 【抽象方法】具有以下特性:  抽象方法是隐式的 virtual 方法。  只允许在抽象类中使用抽象方法声明。  因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:  public abstract void MyMethod();  实现由 overriding

Java程序员面试之葵花宝典

蹲街弑〆低调 提交于 2020-01-17 01:04:25
程序员面试之葵花宝典 1.面向对象的特征有哪些方面 抽象:抽象就是忽略一个主题中与当前目标 无关的那些方面, 以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而 只是选择其中的一部分, 暂时不 用部分细节。抽象包括两个方面, 一是过程抽象,二是数据抽象。 1) 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性, 新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量, 并且类可以修改或增加新的方法使之更适合特殊的需要。 2) 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 3) 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的

程序员面试之葵花宝典

梦想的初衷 提交于 2020-01-17 01:02:38
面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面。抽象并不5. 打算了解全部问题,而6. 只是选择其中的一部分,7. 暂时不8. 用部分细节。抽象包括两个方面,9. 一是过程抽象,10. 二是数据抽象。 11. 继承:继承是一种联结类的层次模型,12. 并且允许和鼓励类的重用,13. 它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,14. 这个过程称为类继承。新类继承了原始类的特性,15. 新类称为原始类的派生类(子类),而16. 原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,17. 并且类可以修改或增加新的方法使之更适合特殊的需要。 18. 封装:封装是把过程和数据包围起来,19. 对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,20. 即现实世界可以被描绘成一系列完全自治、封装的对象,21. 这些对象通过一个受保护的接口访问其他对象。 22. 多态性:多态性是指23. 允许不同24. 类的对象对同25. 一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,26. 很好的解决了应用程序函数同27. 名28. 问题。 2、String是最基本的数据类型吗?

对抽象类和虚方法的区别

房东的猫 提交于 2020-01-17 00:42:14
抽象类定义: 它的作用就是产生子类的同时给于子类一些特定的属性和方法。 abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符以指示某个类只能是其他类的父类。标记为抽象或包含在抽象类中的成员必须通过从抽象类的子类来实现。 特性: 1.抽象类不能被实例化; 2.抽象类可以包含抽象方法和抽象访问器; 3.不能用sealed修饰符修饰; 4.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。 总结: ~抽象方法是隐式的虚方法; ~只容许在抽象类中使用抽象方法声明; ~因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号“{}”,实现由一个重写方法提供,此重写方法是非抽象类的成员; ~在抽象方法声明中使用static或virtual修饰符是错误的; ~除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样; ~在静态属性上使用abstract修饰符是错误的; ~在派生类中,通过包括使用override修饰符的属性声明,可以重写抽象的继承属性。抽象类定义: 它的作用就是产生子类的同时给于子类一些特定的属性和方法。 abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符以指示某个类只能是其他类的父类

Java-面向对象的基础

坚强是说给别人听的谎言 提交于 2020-01-16 10:12:14
Java 继承继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的特性: 1.子类拥有父类非private的属性,方法和构造器。 2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 3.子类可以用自己的方式实现父类的方法。 4.Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。 5.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。 Java 重写(Override)与重载(Overload)重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是

Java面向对象浅谈

允我心安 提交于 2020-01-16 08:29:54
1. 方法重写override: 参数列表必须完全与被重写方法的相同; 返回类型必须完全与被重写方法的返回类型相同; 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。 父类的成员方法只能被它的子类重写。 声明为final的方法不能被重写。 声明为static的方法不能被重写,但是能够被再次声明。 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。 构造方法不能被重写。 如果不能继承一个方法,则不能重写这个方法. 2.重载overload: 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。 重载规则 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样); 被重载的方法可以改变返回类型; 被重载的方法可以改变访问修饰符

day10_接口丶多态

折月煮酒 提交于 2020-01-16 02:09:51
接口 概述 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。引用数据类型:数组,类,接口。接口的使用,它不能创建对象,但是可以被实现( implements ,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。 接口就是多个类的公共规范。 定义接口 根据JDK版本的不同,接口中可以定义的内容也不同。现在的接口中可以定义下列内容 格式: public interface 接口名称 {    //常量   // 抽象方法   // 默认方法   // 静态方法   // 私有方法 } 任何版本中,接口可以包含的内容有: 常量 抽象方法 定义常量 接口当中也可以定义“成员变量”,但是必须使用public static final三个关键字进行修饰。从效果上看,这其实就是接口的【常量】。 格式: public static final 数据类型 常量名称 = 数据值;

Java 修饰符

强颜欢笑 提交于 2020-01-16 01:19:22
Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明: public class className { // ... } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] arguments) { // 方法体 } 访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。 默认的,也称为default,在同一包内可见,不使用任何修饰符。 私有的,以private修饰符指定,在同一类内可见。 共有的,以public修饰符指定,对所有类可见。 受保护的,以protected修饰符指定,对同一包内的类和所有子类可见。 默认访问修饰符-不使用任何关键字 使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为public static final,而接口里的方法默认情况下访问权限为public。 实例: 如下例所示,变量和方法的声明可以不使用任何修饰符。 String

Java——修饰符详解

╄→гoц情女王★ 提交于 2020-01-15 11:38:55
Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明: 实例: public class className { // ... } private boolean myFlag ; static final double weeks = 9.5 ; protected static final int BOXWIDTH = 42 ; public static void main ( String [ ] arguments ) { // 方法体 } 访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。 默认的,也称为 default,在同一包内可见,不使用任何修饰符。 私有的,以 private 修饰符指定,在同一类内可见。 共有的,以 public 修饰符指定,对所有类可见。 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。 我们可以可以通过以下表来说明访问权限: 修饰符 当前类 同一包内 子孙类 其他包 public Y Y Y Y protected Y Y Y N default Y Y N N private Y N N N 默认访问修饰符-不使用任何关键字