抽象方法

抽象类和接口

坚强是说给别人听的谎言 提交于 2019-12-30 05:34:59
抽象类:用abstract关键字来修饰一个类时,这个类叫做抽象类 某种意义上来讲,抽象方法就是被用来重写的,在父类声明的抽象方法(只需声明,不需要去实现)要在子类里边重写,如果子类不想重写,那么再在这个子类里边把这个抽象方法再定义为抽象方法,让这个子类的子类去重写它。 这里有一个规则: 既然父类里面的方法是抽象的,那么对于整个类来说,它就有一个没有实现的方法,这个方法不知道怎么去实现,那么这个类是就是残缺不全的,因此这个类应该被定义为一个抽象类。 java语言规定,当一个类里有抽象方法的时候,这个类必须被声明为抽象类 子类继承父类时,如果这个父类里面有抽象方法,并且子类觉得可以去实现父类的所有抽象方法,那么子类必须去实现父类的所有抽象方法;反之,这个父类里面的抽象方法,子类如果觉得实现不了,那么把就子类也声明成一个抽象类。 抽象方法:用abstract来修饰一个方法时,该方法叫做抽象方法 接口:抽象方法和常量值定义的集合 本质:接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。 java在接口里面声明的抽象方法可以不写abstract关键字来标识,因为接口里面所有的方法都是抽象的,因此这个“abstract关键字默认都是省略掉的是单继承,但是现实是生活中很多时候都得是多继承,为了实现多继承,可以选择一个类继承,把其他别的类都封装成接口

Java语言抽象与多态的总结

杀马特。学长 韩版系。学妹 提交于 2019-12-30 05:31:34
一、抽象   1、抽象的相关概念     如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.(如形状是抽象的类,园、三角形是具体类)     用 abstract 修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。但是抽象类中不一定有抽象方法。   2、抽象类的定义     使用关键字 abstract 定义抽象类,语法     【访问权限】 abstract class 类名{         成员列表     }     如:public abstract class Shape{         public abstract void draw();       }       public abstract class Shape{         public void draw(){          //具体代码         }       }   3、抽象类的相关特性     用 abstract 修饰的类就是抽象类。类中包含有抽象方法,该类为抽象类;     抽象类可以有成员和非抽象的成员方法;     抽象类不能被实例化,但可以有构造方法(函数),只能用来继承;     抽象类只能用作基类,表示的是一种继承关系;     继承抽象的非抽象类 必须实现其中的所有抽象方法 已 实现的方法的参数

abstract(C# 参考)

让人想犯罪 __ 提交于 2019-12-29 05:01:38
abstract 修饰符指示所修饰的内容缺少实现或未完全实现。 abstract 修饰符可用于类、方法、属性、索引器和事件。 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。 在此例中,类 Square 必须提供 Area 的实现,因为它派生自 ShapesClass: C# abstract class ShapesClass { abstract public int Area(); } class Square : ShapesClass { int side = 0; public Square(int n) { side = n; } // Area method is required to avoid // a compile-time error. public override int Area() { return side * side; } static void Main() { Square sq = new Square(12); Console.WriteLine("Area of the square = {0}", sq.Area()); } interface I { void M(); } abstract class C : I { public

【C#复习笔记之抽象类】abstract 08.4.3

别等时光非礼了梦想. 提交于 2019-12-29 05:01:29
abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其 他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。 抽象类具有以下特性: 抽象类不能实例化。他只提供其他类的继承的接口 当然继承类也可以是抽象的 抽象继承类不必全部实现抽象方法, 部分实现便可 抽象类可以继承自非抽象类 实例类必须实现抽象方法 参考自 http://hi.baidu.com/educast/blog/item/9492aec3336f5f51b219a863.html 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed(C# 参考) 修饰符修改抽象类,这意味着抽象类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 一个抽象类可以包含abstract方法,也可包含实例化方法,但继承类(非抽象)必须实现abstract方法 在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。 抽象方法具有以下特性: 抽象方法是隐式的虚方法。 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod();

C# 关键字---abstract

时间秒杀一切 提交于 2019-12-29 05:01:17
abstract 修饰符指示所修饰的内容缺少实现或未完全实现。 abstract 修饰符可用于类、方法、属性、索引器和事件。 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。 抽象类具有以下特性: 抽象类不能实例化。 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。 抽象方法具有以下特性: 抽象方法是隐式的虚方法。 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。 实现一个重写方法由 override 提供,此重写方法是非抽象类的一个成员。 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。 在静态属性上使用 abstract 修饰符是错误的。 在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。 MSDN的示例: abstract class

C#设计模式之6:抽象工厂模式

淺唱寂寞╮ 提交于 2019-12-28 15:43:10
前面分析了简单工厂模式和工厂方法模式,接着来看一下抽象工厂模式,他与工厂方法模式有一些相似的地方,也有不同的地方。 先来看一个不用工厂方法模式实现的订购披萨的代码: 对象依赖的问题:当你直接实例化一个对象时,就是在依赖他的具体类。接着上面的例子,如果在一个PizzaStore里面直接创建很多对象时,他们的依赖关系是这样的: 这里引出一个概念: 依赖倒置。 很清楚的代码里减少具体类的依赖是一件好事。依赖倒置的定义是:要依赖抽象,不要依赖实现。这个原则说说明了:不能让高层组建依赖底层组件,而且,不管是高层组件还是底层组件,他们都要依赖抽象。所谓的高层组件,是由其它底层组件定义其行为的类。例如。PizzaStore是个高层组件,因为他的行为是由比萨定义的:PizzaStore创建所有不同的比萨对象,准备、烘烤、切片、装盒;而披萨本身属于低层组件。 原则的应用 上图展示的问题在于,它依赖每个比萨类型,因为它是在自己的orderPizza方法中,实例化这些具体类型的。虽然我们已经创建了一个抽象,就是Pizza,但是我们仍然在代码中,实际的创建了具体的pizza,所以,这个抽象没有什么影响力。如何在OrderPizza方法中,将这些实例化对象的代码独立出来,我们都知道, 工厂方法 刚好能排上用场。所以,应用工厂方法之后。类图看起来就像这: 在应用了工厂方法模式之后( 参考工厂方法模式 )

python-面向对象之继承

喜夏-厌秋 提交于 2019-12-27 17:56:12
继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为 基类 或 超类 ,新建的类称为 派生类 或 子类 python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass pass class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类 pass 提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如 __str__ )的实现 >>> ParentClass1.__bases__ (<class 'object'>,) >>> ParentClass2.__bases__ (<class 'object'>,) 抽象与继承(先抽象再继承) 抽象即抽取类似或者说比较像的部分。 抽象分成两个层次: 将奥巴马和梅西这俩对象比较像的部分抽取成类; 将人,猪,狗这三个类比较像的部分抽取成父类。 抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度) 继承

(java补充)抽象和封装

我们两清 提交于 2019-12-27 15:57:50
1. 使用面向对象进行设计 面向对象设计的过程就是抽象的过程。 根据业务相关的属性和行为,忽略不必要的属性和行为,由现实世界中“对象”抽象出软件开发中的对象 第一步:发现类 第二步:发现类的属性 第三步:发现类的方法 类的基本结构,其主要由属性和行为组成,称为类的成员变量(或者成员属性)和成员方法,统称为类的成员(除此之外类的成员还包括构造方法,代码块等) 对象的创建: 通过够造方法来创建对象。 通过对象名.属性名的方式调用属性 通过对象名.方法名的方式调用方法 Static 可以用来修饰 属性、方法和代码快 。Static的变量属于这个类所有,即由这个类创建的所有对象共同用一个 Static 变量 。 通常把Static修饰的属性和方法称为 类属性(类变量)、类方法 。不使用Static修饰的属性和方法,属于单个对象,通常称为 实例属性(实例变量),实例方法 。 类属性、类方法可以通过类名和对象名访问,实例属性、实例方法只能通过对象名访问。Final 可以用来修饰属性、方法和类。用final修饰的变量称为常量,其值固定不变。 构造方法的名字和类名相同,没有返回值类型。构造方法的作用主要就是在创建对象时执行一些初始化操作,如给成员属性赋初值。 在没有给类提供任何构造方法时,系统会提供一个无参的方法体为空的默认构造方法。一旦提供了自定义构造方法,系统将不会再提供这个默认的构造方法

抽象和封装

断了今生、忘了曾经 提交于 2019-12-27 12:37:23
面向对象: 从现实中抽象出类分三步: 找出它的种类 找出它的属性 找出它的行为 构造方法: 构造方法的特征: 1、初始化成员变量; 2、如果没有给出构造方法,系统会默认提供一个无参构造方法; 3、如果给我构造方法,会把默认构造方法覆盖; 语法: 访问修饰符 构造方法名 ( ) { //初始化代码 } 构造方法重载: 1、方法重载(overload):在一个类中定义多个相同的名字的方法 2、参数不同; 3、方法重载和返回值和修饰符无关; 重新(overwrite) static关键字: static修饰的调用:类名.属性、类名.方法()、对象.属性、对象.方法() 无static修饰的调用:对象.属性、对象.方法() 在方法里不可以定义static变量 封装: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问; 封装的好处: 1、隐藏类的实现细节; 2、只能通过规定的方法访问数据 3、方便加入控制语句 4、方便修改实现 封装的步骤: 1、修改属性的可见性 2、创建公有的get和set方法 3、在get和set方法中加入属性控制语句 this: 1、当局部变量和成员变量重名时; 2、当构造方法相互调用时 用法: 1、调属性:this.变量名 2、调用方法:this.方法名() 3、调用构造方法:this()

接口抽象的示例应用

倾然丶 夕夏残阳落幕 提交于 2019-12-27 05:06:22
接口与抽象的应用 抽象 从语法层面进行要求子类语法覆盖 如果一个类包含抽象方法那么这个类就是抽象类 继承抽象类的子类强制要求重写父类抽象方法 关键字 abstract 抽象类不能被new public abstract class A { public abstract void fun ( ) ; } public class B { public void fun ( ) { System . out . println ( "6" ) ; } } class C { public static void main ( String [ ] arge ) { A a = new A ( ) ; //报错不能被new定义抽象类 A a1 = new B ( ) ; //可以 } } 用法 [ 修饰符 ] abstract class 类名 { abstract 数据类型 方法名 ( ) ; } 父类 public abstract class Shape { String color ; String shapeinfo ; abstract double computeArea ( ) ; //抽象类通过子类的重写调用 public void displayinfo ( ) { System . out . println ( "形状:" + shapeinfo ) ;