在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。
和抽象语法树相对的是具体语法树(concrete syntaxtree),通常称作分析树(parse tree)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。
没啥大问题,既然返回是double那么输入就用double
还有记住每一个类一个java文件,不要放在一个java文件中!!!
Shapejava类
public abstract class Shape{abstract double GetArea();
}
Rectanglejava类
public class Rectangle extends Shape{double a,b;
Rectangle(double a,double b){
thisa = a;
thisb = b;
}
@Override
double GetArea() {
return ab;
}
}
Test1java类
import javautilScanner;public class Test1{
public static void main(String[] args){
Scanner sca = new Scanner(Systemin);
double aa = scanextDouble();
double b = scanextDouble();
Rectangle a = new Rectangle(aa,b);
Systemoutprintln(aGetArea());
}
}
举例说明吧,学生是一个大类(在程序中就是class),其中的一个学生是一个对象也叫一个实体(在程序中就是我们new的一个对象),接口实际上是一个类,实现接口的类相当于是一个调用关系,抽象类也是一个类,但和接口不同,实现抽象类的类是一个继承的关系,继承只能继承一个,好比只有一个父亲,但是接口可以接很多个,好比usb插口,普通方法就是我们平时写的void
int
string
等等的函数方法,如果是写在类里面,那么其他地方调用需要先实例化一个对象(new一个对象)然后再按调用出来,静态方法就是前面加了static的方法,是使用公共内存空间的,所有对象都可以直接引用而不需要实例化一个对象再使用该方法。静态块的就是在类加载的时候就执行,而且是一个类在第一次被使用的时候会被加载执行(这东西不常用)。
通过VB NET VB程序员终于拥有了全部面向对象的特征 其中之一就是程序员以创建抽象类 虽然抽象类在编程中的作用常被过高估计 但抽象类确实提供了不少开发可行性 一段时间以来 VB程序员都在要求微软向他们提供全面的备受C++及JAVA程序员推崇的面向对象的特性 虽然有少部份与OOP相关的特征已被添加到旧的版本上 但程序员还得等待VB NET 将实际意义上的OOP添加到VB上去 通过OOP你可以创建抽象类 虽然大家都对它寄予了厚望 但令人惭愧的是抽象类仅仅只能给程序员提供更多的开发可行性而已 阅读本文您需要具备一定的面向对象以及VB NET的相关知识 很容易解释什么是抽象类 抽象类即是不能被实例化的类 而且你不能够在自己的程序里通过这种类来生成一个对象 你也许会认为不能被实例化的类是没多大用处的 事实上 在某些环境下 抽象类是非常有用的 你可以把它作为一个基础类以此为基类创建新的类 在对功能要求不高的环境下生成的类 会向你提供一个规定的启始点 通过这个点你可以推导出非抽象类 在此假设一个要用抽象类的程序设计 假设图形程序提供了大量的drawing类:比如圆 三角 曲线等等 所有这些作drawing类都有某个共同的特性 比如位置 大小 色彩 删除等属性 其它的类成员 比如描绘图形的方法就不同于每个单独的类 因此 这样为利用抽象类创造了一个理想的环境 在抽象类中 你需要定义所有drawing类都需要的全部通用类成员 因为drawing类不响应任何图形 但是当把它作为shape specific drawing类中的base类 你需要确认所有这些非 抽象类拥有最基本的功能 创建抽象类 对抽象类的定义很简单 只要在定义域里加入关键字MustInherit 如 Public MustInherit class MyAbstract class End class除开要包含关键字之外 抽象类的定义与非抽象类的定义没什么两样 抽象类包含了从其它类承继而来的属性及方法等等 但是 在抽象类中定义的类成员(属性及方法)是如何与衍生类中的定义元素产生联系的呢?在此并没有复杂的规则 但你作出的决定是与你所拥有的类的性能及它将衍生出来的 类所密切相关 你有三个选择 抽象类中已有的功能比如属性 方法等在衍生类中可以被重载 实现这一功能只要在成员定义中输入Overridable关键字 如 Public Overridable Sub Move(NewX As Integer NewY As Integer) End Sub 为重载abstract base 类中的成员 衍生类在执行语句中须使用Overrides关键字段 如 Public Overrides Move(NewX As Integer NewY As Integer) End Sub 抽象类中已有的功能不能在衍生类中重载 即是 衍生类必须使用抽象类定义的成员 如果你在抽象类中不使用任何特殊字段来定义任一成员将会产生该缺省 以下代码定义了抽象类中的Xpos属性 衍生类必须使用该属性 因为该属性不能被重载 如 Public Property XPos() As Integer End Property利用MustOverride关键字来定义抽象类成员 该成员可以在衍生类中重载 以下举例说明了衍生类必须执行名为GetObjectAt()的方法 Public MustOverride Function GetObjectAt(X As Integer Y As Integer) As Object请注意MustOverride成员不需要End Sub 或End Function语句 使用MustOverride最方便的地方在于它不仅规定了成员的名称同样也规定了成员的符号 先前的例子要求任一衍生类都需定义名称为GetObjectAt()的方法 因此会产生两种类型的整型变量以及返回一个类型对象 该方法是在衍生类中的执行是完全根据程序员的指令要求 通过MustOverride字段说明的方法一些时候也被称为abstract 成员 抽象类与接口如果你熟悉接口的相关知识 你会认为抽象类与它是如此相似 事实上只是一部份类似 定义仅含有抽象成员的抽象类基本上是与接口的定义相同的 因为你已经规定衍生类必须执行某个具有专用符号的成员 另外 抽象类具有其它的功能 是接口无法实现的 尤其是在定义非抽象类成员的基本功能薄BR>当你在认为抽象类或是接口都能如常运作时 请谨记如下几点 除了从一个类(抽象或非抽象) 派生出来 一个衍生类可以执行多个接口 从抽象类派生出来的子类同样能够执行一个或多个接口 这要依你的项目而定 你可以只用一个抽象类或多个接口 或者抽象类和接口混合使用 VB和 NET在这项工作上提供了非常大的灵活性 因此你可以通过不同的方式来达到你想要的结果 底线是一些项目必须是通过抽象类来实现 抽象类也许会被认为是一种非常专业的编程方法 它可帮程序员减少工作量并且可以生成更简便功能更强大的程序 实际 *** 作中使用抽象类 设想一下你正在为一家大公司开发一个新的员工数据库 你的工作就是监督类的执行 使雇员的基本情况与管理部门的要求相吻合 同样 在区分公司分支机构的要求时也提供更大的便利 基本要求如下: 抽象类里有姓名 雇用时间等属性 这些属性不会被重载 因为大多数雇员来自美国 因此在抽象类里执行退休ID 以运行社会保障号码 国外分公司将会利用不同的方式来鉴别雇员的退休ID 因此该属性会在衍生类里重载 以便单个分支机构分别执行 名称为补偿金的方法不会引起争议 然后会返回一个含有雇员补偿金细节的类型对象 因为不同分公司都规定不同的补偿金 薪金 佣金 红利等 因此灵活的执行这些对象是很有必要的 由此会产生一个抽象方法 由此而产生的抽象类的代码 称为EmployeeBase 会在第一栏里显示 位于法国的分公司的程序员用EmployeeBase类作为EmployeeFrance类的基类 与当地雇员记录软件合作使用 因此 衍生类需要承继名称及雇用日期等字段 更多的是 在EmployeeBase 类中的RetirementID成份适合运用在法国 因此 新类不会重载该成份 程序员做的所有这些工作是为了执行abstract Compensation member 的重载 但是在英国 RetirementID 属性不适用于该地 因此衍生类将会重载该成员 同样的也会重载Compensation 成员 lishixinzhi/Article/program/net/201311/13310
抽象类是包含一种或多种抽象方法的类,它本身不需要构造实例。定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。
一个抽象类是一个没有程序实现部分而需要由其子类去填充完整的类。
一个抽象类是被有意设计成未完成的样子。它只定义了一个框架,不同的子类可以根据自己的情况去填充不同的内容。不同的现实子类(非抽象类)提供一组变体。
以上就是关于怎样从c++源程序中提取抽象语法树全部的内容,包括:怎样从c++源程序中提取抽象语法树、1.编写一个Java程序,在程序中定义一个抽象类Shape,里面有一个求面积方法calArea,、JAVA中普通方法、抽象方法、构造方法等都有什么不同和作用呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)