抽象类

抽象类

十年热恋 提交于 2020-03-01 02:56:14
在定义类时,前面加上abstract关键字修饰的类叫抽象类。 抽象类中有抽象方法,这种方法是不完整的,仅有声明而没有方法体。抽象方法声明语法如下: abstract void f(); //f()方法是抽象方法 copy 那我们什么时候会用到抽象类呢? 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。也就是说抽象类是约束子类必须要实现哪些方法,而并不关注方法如何去实现。 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。 所以由上可知,抽象类是限制规定子类必须实现某些方法,但不关注实现细节。 那抽象类如何用代码实现呢,它的规则如下: 用 abstract 修饰符定义抽象类 用 abstract 修饰符定义抽象方法,只用声明,不需要实现 包含抽象方法的类就是抽象类 抽象类中可以包含普通的方法,也可以没有抽象方法 抽象类的对象不能直接创建,通常是定义引用变量指向子类对象。 我们来写一写代码吧! 1、在home/project/目录下创建一个抽象类TelePhone.java。 2、填写需要子类实现的抽象方法。 //抽象方法 public abstract class TelePhone { public abstract void call(); //抽象方法,打电话 public

Java的抽象、接口(interface)与实现(implement)

邮差的信 提交于 2020-03-01 02:37:14
一、abstract抽象类 抽象是什么?顾名思义,抽象就是很抽象…(废话 抽象类是一种思想 反映了很多类共有的一些特征 抽象方法在定义方法时不写方法体 不包含方法体 必须用abstract关键字来修饰 例: abstract void shout ( ) ; 1、抽象方法没有方法体 不能被调用 2、包含抽象方法的类必须声明为抽象类 但抽象类可以不包含任何抽象方法 3、抽象类不能被实例化 4、抽象类的子类只有覆盖了抽象类的 所有 方法 子类才能实例化 否则 仍然是一个抽象类 抽象就是相当于提炼出一些功能 二、interface接口 接口:扩展功能 接口是一种完全抽象类★ 接口是一种抽象的思想 主要反映了被实现的类的一些共性 1、接口中的方法都是抽象的 不能实例化对象 2、当一个类实现接口时 如果这个类是抽象类 则实现接口中的部分方法即可 否则需要实现接口中的所有方法 3、一个类通过implements关键字实现接口时 可以实现多个接口 被实现的多个接口之间要用逗号隔开 这解决了多继承只能继承一个的弊端 被称为多实现 接口继承接口 即可实现多继承 例: interface People { void work ( ) ; void run ( ) ; } class Student implements People { public void work ( ) { System .

C#学习笔记21-多态之抽象类

…衆ロ難τιáo~ 提交于 2020-02-29 14:01:41
C#学习笔记21-多态之抽象类 抽象类 抽象类特点 抽象类实例 抽象类 在前一篇博客 C#学习笔记20-多态之虚方法 中,我们提到实现多态存在有三种方法,前一篇讲解了虚方法,这一篇继续复习抽象类。当父类中的方法不知道如何去实现时,可以将父类写成抽象类,方法写成抽象类,比如小明打球,小平打球,但是他们如何打球未知,此时就可以写成抽象类来描述 抽象类,顾名思义就是一个抽象的,没有实体(没有具体实现)的类,即抽象类不能被实例化,不能创建对象。 抽象类要实现多态,需要创建抽象方法,需要加上关键字abstract,基本语法如下: public abstract class Animal { public abstract string Name { get ; set ; } public abstract void Bark ( ) ; } 抽象类特点 1)抽象类不允许创建对象,对可以创建子类对象赋值给父类 假设父类为Animal、子类为Dog,则 Animal a1 = new Animal ( ) ; //写法错误,不能创建对象 Animal a2 = new Dog ( ) ; //写法正确 2)抽象类中的成员都必须标记abstract,并且不能有任何实现,抽象类中可以包含实例成员,并且抽象类中实例成员可不被子类实现 3)抽象成员必须在抽象类中,有抽象成员就必须有抽象类 4

php面向对象基础知识点总结

故事扮演 提交于 2020-02-29 13:17:44
下面是一些PHP面向对象基础知识的摘录,摘录内容来自PHP5.1手册。 1.类的变量成员叫做“属性”,或者叫“字段”、“特征”,在本文档统一称为“属性”。 2.属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是 在编译阶段之后在运行阶段运算出的常数。 3.在类的成员方法里面,可以通过$this->property(property是属性名字)这种方式来访问类的属性、 方法,但是 要访问类的静态属性或者在静态方法里面却不能使用,而是使用self::$property。 4.在类的非静态方法里面可以使用伪变量$this,这个伪变量是调用该方法的实例化对象引用 5.常量的值必须是一个定值,不允许修改,且不能是变量,类属性或其它操作(如函数调用)的结果。 <?php class MyClass { const constant = 'constant value'; function showConstant() { echo self::constant . "\n"; } } echo MyClass::constant . "\n"; $n=new MyClass(); $n->showConstant(); ?> 6.构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

继承中的关键字

点点圈 提交于 2020-02-29 11:22:09
继承中的关键字 1. 继承的基本含义: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。子类最基本的功能就是维持父类的基本操作,但是子类可以对其功能的扩充。 2. extends 格式:class A extends B { } 表示A类是B类的一个子类,B类是A类的 唯一 父类。 在Java当中的继承是单继承,不允许多继承(class A extends B,C),单继承就是子类只有一个唯一的父类,但是可以多重继承(class A extends B ,class B extends C)。 子类会显式继承父类当中所有的非私有化的成员变量和成员方法,所有的私有化成员可以通过Setter和Getter方法来操作,且构造方法不会被继承。 子类在继承父类成员的同时,可以进行扩展,定义属于自己的成员变量和成员方法,对其功能进行扩充。 3.super 功能1: 调用父类的成员变量和方法 。 子类继承父类中的成员变量和方法,当子类声明了与父类相同的成员变量以及对父类当中的成员方法进行重写之后,使用子类实例调用的成员变量与方法就是子类当中的成员变量和方法,而这时想要调用父类当中已经被重写被覆盖的成员就需要用到super关键字,在子类当中使用super关键字在调用成员变量和方法时会直接跳过子类

PHP的抽象类、接口的区别

最后都变了- 提交于 2020-02-28 18:31:19
区别: 1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。 2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。 3、接口没有构造函数,抽象类可以有构造函数。 4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。 5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。 抽象类还是接口。(主要区别就是抽象只能一个继承,而interface接口则可以多个继承) 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。 如果必须从多个来源继承行为,就使用接口。 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。 主要区别就是抽象只能一个继承,而interface接口则可以多个继承 来源: https://www.cnblogs.com/zyrbicibici/p/10644679.html

Python开发基础-Day18继承派生、组合、接口和抽象类

痴心易碎 提交于 2020-02-28 10:22:34
类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承object类的子类成为经典类(在python2中,没有继承object的类,以及它的子类,都是经典类) 1 class People: 2 pass 3 class Animal: 4 pass 5 class Student(People,Animal): #People、Animal称为基类或父类,Student为子类,Student继承了People和Animal的所有属性 6 pass 7 print(Student.__bases__) #__bases__方法,查看继承的类的元组 8 print(People.__bases__) 9 print(Animal.__bases__) 输出结果: 1 (<class '__main__.People'>, <class '__main__.Animal'>) #继承了两个父类 2 (<class 'object'>,) #默认继承了object类 3 (<class 'object'>,) 继承 继承是为了减少代码重用的问题,以减少代码冗余。 继承是一种是什么是什么的关系,例如老师类是人类,而非老师类是生日类 继承类示例: 1

类的继承与派生

安稳与你 提交于 2020-02-28 10:22:16
类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承object类的子类成为经典类(在python2中,没有继承object的类,以及它的子类,都是经典类) 1 class People: 2 pass 3 class Animal: 4 pass 5 class Student(People,Animal): #People、Animal称为基类或父类,Student为子类,Student继承了People和Animal的所有属性 6 pass 7 print(Student.__bases__) #__bases__方法,查看继承的类的元组 8 print(People.__bases__) 9 print(Animal.__bases__) 输出结果: 1 (<class '__main__.People'>, <class '__main__.Animal'>) #继承了两个父类 2 (<class 'object'>,) #默认继承了object类 3 (<class 'object'>,) 继承 继承是为了减少代码重用的问题,以减少代码冗余。 继承是一种是什么是什么的关系,例如老师类是人类,而非老师类是生日类 继承类示例: 1

java基础 抽象类和接口

↘锁芯ラ 提交于 2020-02-28 04:42:49
抽象类 概述  为什么抽象类产生?在我们编写一个类时,会给该类定义一些方法,这些方法是用来描述功能和具体实现的方式,这些方法都有方法体,  例如:一个图形类应该有周长的方法,但是不同的图形求周长方法不一样。分析事物,发现共性,就出现了向上抽取。方法的声名相同,但是方法功能主体不同,这样就可以向上抽取,但只是抽取方法声名,但不抽取方法主体,称这个方法就是抽象方法.  抽象函数类必须被abstract关键字修饰,被abstract关键字修饰的类就是抽象类 代码使用 抽象类&抽象方法的定义 抽象方法 定义格式: public abstract 返回值类型 方法名(参数); 抽象类 定义的格式: abstract class 类名{ } public abstract class Developer { //抽象方法 public abstract void work ( ) ; } public class JavaEE extends Developer { public void work ( ) { System . out . println ( "JavaEE工程师写JavaEE代码" ) ; } } public class Android extends Developer { public void work ( ) { System . out . println (

Java基础 学习笔记4

ぐ巨炮叔叔 提交于 2020-02-27 18:42:45
1.继承 继承是类与类的一种关系;Java中的继承是单继承,只有一个父类。 继承的好处:子类直接拥有父亲的所有属性和方法(private修饰的无效!),可实现代码复用。 语法规则: class 子类 extends 父类 eg:class Dog extends Animal{ … } 2.Java中的方法重写 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。 语法规则:返回值类型,方法名,参数类型及个数都要与父类继承的方法相同,才叫方法的重写。 3.Java中的继承初始化顺序 a.初始化父类再初始化子类。(使用构造方法可以看出,虽然仅创建了子类的对象,但是先执行了父类的构造方法,之后才执行子类的构造方法)。 b.先执行初始化对象中的属性,再执行构造方法中的初始化。 4.Java中final的使用 final关键字: 表示“最终的”,即不可修改。 final可以修饰类、方法、属性和变量 a.修饰类:该类不允许被继承 b.修饰方法:该方法不允许被重写 c.修饰属性:则该属性不会进行隐式初始化(不会自动初始化,之前我们没有初始化都是系统帮我们自动初始化),需要手动初始化或者在构造方法中初始化 (但二者只能选一,即只能初始化一次后便不能更改) d.修饰变量,只能在声明的时候赋一次值,成为常量(static final 会使其成为全局常量)。