抽象方法

java基础:9.1 抽象类

我是研究僧i 提交于 2020-02-10 13:29:04
在前几章,我们学了父类与继承等操作。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为 抽象类。 在父类里定义一些方法,但这些方法不能在父类中实现,因为他们的实现取决于几何对象的具体类型。这样的方法称为 抽象方法 ,在方法头中用 abstract 修饰符表示。 抽象方法是非静态的 抽象类和常规类很像,但是 不能使用new操作符创建它的实例 。抽象方法只有定义而没有实现,它的实现由子类提供。 一个包含抽象方法的类必须声明为抽象类。 抽象类的构造方法定义为protected ,因为它只被子类使用。创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的数据域。 不能使用new 操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型 GeometricObject[] object = new GeometricObject[10]; object[0] = new Circle(); 是合法的 // GeometricObject.java // 包含抽象类的父类 public abstract class GeometricObject { private String color = "white"; private boolean filled; private java.util.Date dateCreated;

抽象类

若如初见. 提交于 2020-02-10 13:28:08
一、什么是抽象类? 在父类中,有一些子类的共同方法,但这些方法在父类中没有具体的实现,这样的方法就称为抽象方法,在方法头中使用abstract修饰符表示。包含有抽象方法的类就称为抽象类。 在UML图形记号中,抽象类和抽象方法的名字用斜体表示。 抽象类不能使用new操作符创建它的实例。抽象方法只有定义而没有实现。它的实现由子类提供。一个包含了抽象方法的类必须声明为抽象类。 抽象类的构造方法定义为protected,因为它只能被子类使用。 抽象类的几点说明: (1)抽象方法不能包含在非抽象类中,也就是说,只要包含了抽象方法,这个类就一定要定义为抽象类。在抽象类扩展的非抽象子类中,必须实现所有的抽象方法。抽象方法是非静态的。 (2)可以定义一个不包含抽象方法的抽象类。 (3)抽象类不能使用new操作符来初始化。 (4)子类可以覆盖父类的方法并将它定义为abstract。 (5)即使子类的父类是具体的,这个子类也可以是抽象的。 (6)不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。 二、为什么要使用抽象类? 举例: 设计一个几何图形对象GeometricObject,设计一个方法比较两个几何面积是否相等。如果没有抽象方法getArea(),则无法实现equalArea()。 abstract class Geometric { public abstract

Java抽象类的使用

故事扮演 提交于 2020-02-10 11:13:15
@author Administrator 类继承的主要用于利用扩充 已有类的功能,但是对之前的继承操作而然会发现,子类可以有自己的选择任意来决定是否要覆写某一个方法,这个时候父类无法对子类做出强制性约定(强制你必须覆写某一个方法)这种情况下我们往往不会采用类的继承 (在实际开发之中很少会出现继承一个已经完善的类 ) *什么是完善的类 *比如: *class person { 这个 person 类算不算完善的类 (所谓完善 的类是 可以直接可以使用的类就是完善的类 ) *} 而是必须要继承抽象类 ,在以后进行父类(SuperClass )的设计的时候我们优先 考虑的一定是抽象类。 抽象类的基本定义 抽象类的主要作用在于对子类中的覆写方法 ,进行约定,在抽象类里面可以定义一些抽象方法以实现这样的 一个 约定,那么抽象方法的是使用了 abstract 关键词定义的并且没有提供方法体的方法,而抽象方法所在 的类必须 为抽象类,抽象类必须使用 abstract 关键词来进行定义 (直白点说就是在普通类的基础上追加抽象方法就是抽象类)。 范例:定义一个抽象类 package duixiang ; abstract class Message { //定义一个抽象类 private String type ; public abstract String getConnectInfo ( )

写代码的逻辑原则

梦想的初衷 提交于 2020-02-10 07:46:41
1.写代码前画流程图,写伪代码,帮助理清思路再着手写代码。 2.写代码时,多抽象,如每个功能拆分一个方法,如数据库操作类抽象的通用些。 3.每一个方法通过输入输出测结果,保证每个方法的正确性和通用性,再调试代码时不再调试此方法。 4.写每段代码要有思考,过脑子,有这样写的道理。 5.遇到每个不懂的点,如果当时没有时间,要记录下来,有时间了研究透,一点一点积累。 来源: https://www.cnblogs.com/xiaoyueer/p/5478990.html

抽象类和接口的异同

99封情书 提交于 2020-02-09 03:23:54
本文在文字说明的时候将不会举例,在文章写完后,在列出整个例子 一、抽象类:(abstract class) 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。抽象类不能被密封。   抽象类中virtual和abstract的异同    相同点: 两者是为了实现多态,都可以重写。 对象都可以不调用子类的该方法。    不同点: virtual在基类中必须有方法的实现,abstract必须只有方法的声明 virtual在子类中可以不重写;abstract必须在子类中重写 二、接口:(interface)   接口是引用类型的,类似于类   接口有如下特性:接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。    使用C#接口应注意几个问题:   1、C#中的接口是独立于类来定义的。这与 C++模型是对立的,在 C++中接口实际上就是抽象基类。   2

C# 抽象类abstract

限于喜欢 提交于 2020-02-08 23:16:18
不能初始化的类被叫做 抽象类 ,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例,有未被实现的方法。抽象类不可以new对象。 "一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步一个抽象类只能通过接口和作为其它类的基类使用。 抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。 abstract class ShapesClass { abstract public int Area(); } class Square : ShapesClass { int x, y; // Not providing an Area method results // in a compile-time error. public override int Area() { return x * y; } } 一个包含非抽象方法的抽象类: abstract class MyAbs { public void NonAbMethod() { Console.WriteLine("Non-Abstract Method"); } } class MyClass : MyAbs { } class MyClient { public

C#.NET里面抽象类和接口有什么区别

橙三吉。 提交于 2020-02-08 20:38:09
1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。 2.接口的本质 接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子: interface InterfaceName { void Method1(); void Method2(int para1); void Method3(string para2,string para3); } 那么,接口的本质是什么呢?或者说接口存在的意义是什么。我认为可以从以下两个视角考虑: 1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。 例如,在自然界中,人都能吃饭,即“如果你是人,则必须能吃饭”。那么模拟到计算机程序中,就应该有一个IPerson(习惯上,接口名由“I”开头)接口,并有一个方法叫Eat(),然后我们规定,每一个表示“人”的类,必须实现IPerson接口,这就模拟了自然界“如果你是人,则必须能吃饭”这条规则。 从这里,我想各位也能看到些许面向对象思想的东西。面向对象思想的核心之一

C#抽象类及其方法的学习

北城余情 提交于 2020-02-08 20:37:07
在C#中使用关键字 abstract 来定义抽象类和抽象方法。 不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们 的实例。 "一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步 一个抽象类只能通过接口和作为其它类的基类使用."- C++ Programming Language by Stroustrup Chapter13.2 抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类 成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。 abstract class ShapesClass { abstract public int Area(); } class Square : ShapesClass { int x, y; // Not providing an Area method results // in a compile-time error. public override int Area() { return x * y; } } 例如,一个包含非抽象方法的抽象类: abstract class MyAbs { public void NonAbMethod() { Console.WriteLine( " Non

接口与抽象类那点事

喜夏-厌秋 提交于 2020-02-08 20:36:20
也谈接口和抽象类区别 好象这是一个老生常谈的问题,最近有个学生问我他们的区别,于是我就又想起这个话题。 有不少的文章在描述这两者,但好象都没有怎么从初学者的浅显角度来看。 其实这两者有很多相识之处,当然也有很多不同之处。要理解它们,应该先从面向对象思想开始。面向对象思想里面,最基本的就是封装,继承和多态。所谓封装,说的小,方法(函数)也就是对一种操作的封装,说的大,用类来描述一个具体的对象。 那么在面向对象程序中应该说对封装还有一层新的定义,即将类的描述抽象化,也就是说描述类的外貌而不去考虑它的实际。 那么我们回过头来看抽象类,它必须被继承使用,描述的其实是一种继承关系,即"is a"的关系。类继承它,也就是说类拥有它所有抽象方法等,那么也就是类遵循了它所定义的规范。但是呢,这种规范是通过继承而来,类的发展必须依赖它的父类。 abstract class 工作 { abstract void 上班() } class 张三 : 工作 { } abstract class 工作 { abstract void 上班() } class 人: 工作 { } class 李四 : 人 { } 我们从这个例子中不难看出,张三和李四同样都遵循抽象工作的规范,都拥有上班这个方法,但是呢,他们的发展始终受到父类的影响。 当然,我这里只是从它们使用的角度来看,我们还能从他们设计角度度来看

我对面向对象设计的理解——Java接口和Java抽象类

穿精又带淫゛_ 提交于 2020-02-08 20:34:56
在没有好好地研习面向对象 设计 的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解。 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有方法名,没有方法体的东西,我实现它又有什么用呢?我从它那什么也得不到,除了一些方法名,我直接在具体类里加入这些方法不就行了吗? 为什么一定要有抽象类这个概念?为什么就不能把这个父类写成一个具体的类,子类再继承它不就可以了吗?何必弄一个抽象类出来,还要弄一些没有方法体的抽象方法,弄得又象接口又象类的,让人捉摸不定。 当我开始 学习 java设计模式,真正走进面向对象设计的大门之后,我才发现,自己对面向对象设计的理解原来是那么的片面,那么的肤浅,根本就没有真正理解面向对象思想的精髓,在某一种程度上还受着面向过程的影响,以为弄出了一个个类,就算是面向对象了,而其实还是被过程所驱使着。 我还是说说我现在对面向对象思想的理解吧,不一定正确全面,但我想应该还算是比以前略有进步吧。 面向对象思想,我觉得最关键的就是抽象。 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时