抽象类

PHP的抽象类和接口

谁都会走 提交于 2020-04-03 18:07:50
抽象类与接口相似,都是一种比较特殊的类。抽象类是一种特殊的类,而接口也是一种特殊的抽象类。它们通常配合面向对象的多态性一起使用。虽然声明和使用都比较容易,但它们的作用在理解上会困难一点。 ①抽象类 在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问它的接口。而抽象方法就是为了方便继承而引入的。本节中先来介绍一下抽象类和抽象方法的声明,然后再说明其用途。在声明抽象类之前,我们先了解一下什么是抽象方法。抽象方法就是没有方法体的方法,所谓没有方法体是指在方法声明时没有花括号及其中的内容,而是在声明方法时直接在方法名后加上分号结束。另外在声明抽象方法时,还要使用关键字abstract来修饰。声明抽象方法的格式如下所示: abstract function fun1(); //不能有花括号,就更不能有方法体中的内容了 abstract function fun2(); //直接在方法名的括号后面加上分号结束,还要使用abstract修饰 只要在声明类时有一个方法时抽象方法,那么这个类就是抽象类,抽象类也要使用abstract关键字来修饰。在抽象类中可以有不是抽象的成员方法和成员属性,但访问权限不能使用private关键字修饰为私有的。下面的例子在Person类中声明了两个抽象方法say()和eat(),则Person类就是一个抽象类

继承

╄→尐↘猪︶ㄣ 提交于 2020-04-03 16:25:39
继承的另一种方式: 最常见的是直接继承一个已经存在的类 当你想要创建一个新的类,发现这个类中的一些最某一个类中已经存在,那就没有必要从头开始写,可以直接继承已有的类然后做补充 案列: class MyList(list): def __init__(self,element_cls): # 当你覆盖了init方法时 # 不要忘记调用super().init函数让父类完成原有的初始化操作 super().__init__() self.element_cls = element_cls def append(self, object): # if isinstance(object,str) if object.__class__ == self.element_cls: super().append(object) else: print("只能存储%s类型!" % self.element_cls.__name__) super()的问题 mro列表: python支持多继承,一个类可以同时继承多个父类。 优点是:更加灵活。 问题是:属性的查找顺序该怎么确定 问题:多继承时如果多个父类中出现了同名的属性/函数 你不能用眼睛去判断查找顺序,需要使用mro列表来查看真正的继承顺序 总结:super 在访问父类属性时,是按照mro列表一层层往上找的 测试: class A: def

Java 接口

£可爱£侵袭症+ 提交于 2020-04-03 10:21:48
接 口:★★★★★ 1:是用关键字 interface 定义的。 2:接口中包含的成员,最常见的有全局常量、抽象方法。 注意:接口中的成员都有固定的修饰符。 成员变量:public static final 成员方法:public abstract interface Inter{ public static final int x = 3; public abstract void show(); } 3:接口中有抽象方法,说明 接口不可以实例化 。 接口的子类必须实现了接口中所有的抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。 4:类与类之间存在着继承关系,类与接口中间存在的是 实现 关系。 继承用extends ;实现用implements ; 5:接口和类不一样的地方,就是, 接口可以被多实现 ,这就是多继承改良后的结果。java将多继承机制通过多现实来体现。 6:一个类在继承另一个类的同时,还可以实现多个接口。所以 接口的出现避免了单继承的局限性 。还可以将类进行功能的扩展。 7:其实java中是有多继承的。接口与接口之间存在着继承关系, 接口可以多继承接口 。 接口都用于设计上,设计上的特点: (可以理解主板上提供的接口) 1:接口是对外提供的规则。 2:接口是功能的扩展。 3:接口的出现降低了耦合性。 抽象类与接口: 抽象类: 一般用于描述一个体系单元

Java面试题集锦

依然范特西╮ 提交于 2020-04-03 05:27:09
1. String、StringBuffer和StringBuilder的区别。 (1) String:存储数值不可改变的字符串 (2) StringBuffer:可变字符序列、线程安全、效率低 (3) StringBuilder:可变字符序列、线程不安全、效率高 2. final, finally, finalize的区别。 (1) final修饰的类不能被继承,修饰的方法不能被子类重写,修饰的属性为常量。一旦初始化后,不可再被赋值。习惯上,常量 用大写字符表示。 (2) finally是异常处理语句结构的一部分,表示总是执行。 (3) finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其 他资源回收,例如关闭文件等。 3. HashMap和Hashtable的区别。(都完成了Map接口) (1) HashMap是Hashtable的轻量级实现(非线程安全的实现),效率较高,而Hashtable是线程安全的,效率较低。 (2) Hashtable不允许使用 null 作为 key 和 value,而HashMap 可以。 (3) Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。

问题 A: C#抽象类Vehicles

半城伤御伤魂 提交于 2020-04-02 14:04:20
题目描述 一、定义一个抽象类Vehicles,具体要求如下: 1、私有字段商标brand(string)、颜色color(string)。 2、定义公有读写属性Brand用来访问brand字段;定义公有读写属性Color用来访问color字段。 3、设计一个抽象虚方法run()。 二、定义Vehicles类的子类Car,具体要求如下: 1、私有字段载重load(double)。 2、定义公有读写属性Load用来访问load字段。 3、重写抽象方法run(),用来输出信息“Car开动了”。 4、设计一个方法getInfo(Car car),用来输出信息,具体格式如下描述。 商标:***, 颜色:***,载重:***。 根据以下代码,请补写缺失的代码。 using System; namespace ConsoleApplication1 { abstract class Vehicles { ///////////////////////////////////////////////////////////////// //请填写代码 ///////////////////////////////////////////////////////////////// } class Program { static void Main(string[] args) { Car car

建立自定义命令扩展ArcGIS

那年仲夏 提交于 2020-04-02 11:16:46
关于本文 本文演示如何创建一个简单的命令,实现缩放至所选图层范围的功能。该命令继承自ESRI公司的ADF里的BaseCommand类。以下是详细实现步骤。 注:本文演示环境 VS2020 & C# & ArcGIS 10.0 本文PDF下载 创建一个类库 开启VS2010,以 Visual C# >> ArcGIS >>Extending ArcObjects 下的Class Library (ArcMap) 为模板创建一个新类库项目,将该项目命名为CmdZoomToLayer,选择合适的存储位置,单击确定。如下图所示。 添加引用 为该项目添加所需的ESRI对象库引用以及System.Drawing引用。 ESRI提供的ESRI.ArcGIS.ADF.Local程序集包含了ESRI.ArcGIS.ADF.BaseClasses命名空间,可以继承该程序集所提供的一些抽象类来创建一个自定义命令/工具。该程序集还包含了ESRI.ArcGIS.ADF.CATIDs命名空间,其中的一些类可用于注册组件至合适的ESRI组件类别。 在上一步点击确定后,弹出ArcGIS Project Wizard,可以利用该向导添加ESRI对象库引用。因为现在创建的是ArcGIS Desktop应用程序,所以只有与ArcGIS Desktop相关的程序集才显示于该向导中。添加ESRI.ArcGIS.ADF

模板方法模式

那年仲夏 提交于 2020-04-01 04:33:18
模板方法模式的定义 模板方法模式( Template Method Pattern)是如此简单,以致让你感觉你已经能够掌握其 精髓了。其定义如下: Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改 变一个算法的结构即可重定义该算法的某些特定步骤。) 模板方法模式确实非常简单,仅仅使用了 Java的继承机制,但它是一个应用非常广泛的 模式。其中, AbstractClass叫做抽象模板,它的方法分为两类: ● 基本方法 基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。 ● 模板方法 可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度, 完成固定的逻辑。 注意 为了防止恶意的操作,一般模板方法都加上 final关键字,不允许被覆写。 在类图中还有一个角色:具体模板。

java 期末考试复习

纵然是瞬间 提交于 2020-04-01 01:51:31
//Scanner这样写? Scanner input = new Scanner(System. in ); /*--> */ /*--> */ //不断获得下一个单词 names[ i] = toTitleCase( input.next()); inheritance • Constructors are inherited, but use super() public class Parent { public Parent() { do some code; } } public class Child extends Parent { public Child() { super(); // call Parent() do some more code; } } so in a main method: Child c = new Child(); // Calls Parent(), too Default constructor == no parameters 第72页,子类能加新方法吗? 只有public方法的可以override,别的几个关键字都不行 exam1: //yuec2 yue cheng package exam1; //import java.io.File; import java.io.FileNotFoundException;

java基础面试题 整理给自己

ぃ、小莉子 提交于 2020-03-30 16:37:44
基础内容 1.JDK 和 JRE 有什么区别? JDK提供了java的开发环境和运行环境,JRE只是java的运行环境。JDK除了包含JRE还包含了编译器javac以及一些java程序的分析调试工具。 2.== 和 equals 的区别是什么? == 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。 3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 不对,两个对象的 hashCode()相同,equals()不一定 true。 有些字符串的hashCode 可能一样 4.final 在 java 中有什么作用? final修饰的类是最终类不能被继承;final修饰的方法不能被重写;final修饰的变量是常量,必须初始化,初始化后不能被修改。 5.java 的基本类型 基础类型有 8 种:byte、boolean、char、short、int、float、long、double 6. java 中操作字符串都有哪些类?它们之间有什么区别? 操作字符串的类有:String、StringBuffer、StringBuilder。 String 和

Java面试知识点总结

纵饮孤独 提交于 2020-03-30 16:09:29
Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础;若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大)。本文的问题列表来自于http://www.nowcoder.com/discuss/3043,在此感谢原作者的无私分享:) 1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? (1)boolean boolean数据类型非true即false。这个数据类型表示1 bit的信息,但是它的大小并没有精确定义。 《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出 boolean类型单独使用是4个字节,在数组中又是1个字节。 那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗