抽象方法 java

合集下载

谈谈Java抽象语法树的构建

谈谈Java抽象语法树的构建
在插件 JDT Core 的 org.eclipse.jdt.core.dom 包中,含有 AST、ASTParser、ASTNode、ASTVisitor 等类, 通过这些类可以获取、创建、访问和修改抽象语法树。比如,ASTVisitor 类就提供了一系列重载 visit 函数, 用于遍历抽象语法树,以获得 AST 上每个结点信息。
VariableDeclarationStatement
ReturnStatement
TYPE
FRAGMENTS
PrimitiveType VariavleDeclarationFragment
NAME
INITIALIZER
SimpleName
InfixExpression
图 1. ASTParser 将 Circle 类转化成相应的抽象语法树
为了形象地理解 AST,下面通过一个具体的程序(Circle.java)说明 AST 的结构以及结点的类型。
package a.b.c;
import .Shape;
public class Circle {
private final double pi = 3.14;
public double getSqure (double r) {
初步了解 AST 概念后,下面将介绍如何使用 JDT,即,如何将一个或多个*.java 文件解析成相应的抽 象语法树。
准备工作
(1) 安装 JDK8,Eclipse Mars 版(建议安装新版本,因为新版本中 JDT Core 插件最新,解析能力更强), 并导入下列 jar 包,它们均位于 Eclipse 文件夹 plugins 下,你的版本号可能不同,但前缀名称应该一样:
方法parsersetresolvebindingsbooleanenabled的参数enabled般设置为true有些场合需要解绑定时该方法必须设置为true否则将出现解绑定错误关于解绑定的概念和使用场景以后单独撰文介方法parsersetkindintkind用于指定将何种层次的代码实体解析成ast其参数kind可设置为编译单元astparserkcompilationunit即一个java文件级别以及更低层次的实体类型如

Java实验7抽象类和接口

Java实验7抽象类和接口

实验6抽象类与接口一、实验目的:1、学习掌握抽象类的概念与使用方法。

2、学习掌握接口的概念与定义接口的方法。

3、学习使用Cloneable接口与clone方法进行对象内容的复制。

4、理解浅复制与深复制的概念,掌握覆盖clone方法进行对象内容深复制的技术。

二、实验任务:1、学习掌握抽象类的概念与使用方法。

程序要求:(1)首先创建一个类家族,其中抽象类几何图形类GeometricObject为父类,圆类Circle与矩形类Rectangle为子类。

几何图形类GeometricObject中定义保护型字符串变量color,表示图形的颜色;该类要具备构造方法与两个抽象方法findArea与findPerimeter,抽象方法findArea求图形面积,抽象方法findPerimeter求图形周长。

(2)Circle类与Rectangle类就是GeometricObject类的子类,其中应实现父类的抽象方法。

(3)程序主方法中创建两个几何对象,一个圆与一个矩形,并用GeometricObject类的引用变量引用它们,调用抽象方法。

2、学习接口的概念与利用接口实现多态的方法。

程序要求如下:(1)首先创建圆类Circle与圆柱体类Cylinder,其中Circle类就是父类,Cylinder类就是子类;(2)创建接口Comparable,其中包含一个抽象方法compareTo,用来比较对象的大小。

抽象方法compareTo的形式如下:public int compareTo(Object o);(3)创建类ComparableCircle,该类为Circle类的子类,并实现Comparable接口。

(4)创建类ComparableCylinder,该类为Cylinder类的子类,并实现Comparable接口。

(5)创建通用类Max,其中包含通用方法max,只要类实现了Comparable 接口,就可以使用max方法返回两个对象中较大的一个。

java abstract方法继承

java abstract方法继承

Java Abstract方法继承一、什么是Abstract方法Abstract方法是Java中一种特殊的方法,它只有声明而没有具体的实现。

在定义一个Abstract方法时,需要使用abstract关键字修饰方法,并且该方法所在的类必须是抽象类或者接口。

Abstract方法的定义如下:public abstract void methodName();二、抽象类与接口抽象类(Abstract Class)是一个不能被实例化的类,它可以包含Abstract方法和具体的方法实现。

抽象类通过使用abstract关键字进行修饰。

接口(Interface)是一种纯抽象的类,它只包含Abstract方法和常量。

接口定义方法时,默认使用public abstract修饰。

抽象类和接口的区别如下: - 抽象类可以有构造方法,而接口不能有构造方法。

- 类只能继承一个抽象类,但可以实现多个接口。

- 抽象类可以有成员变量,而接口只能有常量。

- 接口中的方法默认是public的,而抽象类中的方法可以有不同的访问修饰符。

三、Abstract方法的继承方式Abstract方法在继承关系中有以下几种继承方式:子类覆盖方法、子类重载方法、子类继续声明抽象方法。

1. 子类覆盖方法当一个子类继承自一个抽象类或者实现一个接口时,它必须实现抽象类或接口中的所有Abstract方法。

子类通过覆盖Abstract方法来提供具体的实现。

例如,有一个抽象类Animal,其中定义了一个Abstract方法eat(),如下所示:public abstract void eat();}如果一个子类Dog继承自Animal,则必须实现eat()方法:public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃骨头");}}2. 子类重载方法除了覆盖Abstract方法,子类还可以重载Abstract方法。

Java抽象类、抽象方法详解

Java抽象类、抽象方法详解

Java抽象类、抽象⽅法详解⽬录1. 概述类⽤于描述现实⽣活中⼀类事物。

类中有属性、⽅法等成员。

⽗类中的⽅法,被它的⼦类们重写,⼦类各⾃的实现都不尽相同。

那么⽗类的⽅法声明和⽅法主体,只有声明还有意义,⽽⽅法主体则没有存在的意义了。

某种情况下,⽗类只能知道⼦类应该具备⼀个怎样的⽅法,但是不能够明确知道如何实现该⽅法。

只能在⼦类中才能确定如何去实现⽅法体。

例如:所有⼏何图形都应该具备⼀个计算⾯积的⽅法。

但是不同的⼏何图形计算⾯积的⽅式不同。

我们把没有⽅法主体的⽅法称为抽象⽅法。

Java语法规定,包含抽象⽅法的类就是抽象类。

2. 抽象⽅法抽象⽅法:只有⽅法的声明,没有⽅法体,以分号 ; 结尾,使⽤abstract关键字修饰定义格式:修饰符 abstract 返回值类型⽅法名(参数列表);代码举例:public abstract void run();抽象⽅法不能⽤private、final、static、native修饰3. 抽象类抽象类:包含抽象⽅法的类。

如果⼀个类包含抽象⽅法,那么该类必须是抽象类,使⽤abstract关键字修饰定义格式:public abstract class 类名 {//抽象类中可以包含变量、常量,抽象⽅法,⾮抽象⽅法}代码举例:public abstract class Person {public abstract void work();}抽象类的使⽤抽象类不能实例化,不能直接创建对象。

抽象类是⽤来被继承的,继承抽象类的⼦类必须重写⽗类所有的抽象⽅法。

否则,该⼦类也必须声明为抽象类,使⽤abstract关键字修饰抽象类也是类,因此原来类中可以有的成员,抽象类都可以有,那么抽象类不能直接创建对象,为什么还有构造器呢?供⼦类调⽤,⼦类创建对象时,需要为从⽗类继承的属性初始化。

抽象类不能使⽤final修饰public class Teacher extends Person {public void work() {System.out.println("讲课");}}public class AbstractClassTest {public static void main(String[] args) {// 创建⼦类对象Teacher t = new Teacher();// 调⽤run⽅法t.work();}}输出结果:讲课此时的⽅法重写,是⼦类对⽗类抽象⽅法的完成实现,我们将这种⽅法重写的操作,叫做实现⽅法。

JAVA继承、抽象类、接口

JAVA继承、抽象类、接口

JA V A继承、抽象类、接口编辑人:星辰·樱联系QQ:838826112一.类的继承通过继承可以实现代码的复用,被继承的类称为父类或超类(superclass),由继承而得到的类称为子类(subclass)。

一个父类可以拥有多个子类,但一个类只能有一个直接父类,这是因为JA V A语言中不支多重继承。

子类继承父类的成员变量和成员方法,同时可以修改父类的成员变量或重写父类的方法,还可以添加新的成员变量或成员方法。

JA V A语言中有一个名为ng.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。

1.子类的创建类的继承是通过extends关键字来实现的,在定义类时若使用ectends关键字指出新定义类的父类,就是在两个类之间建立了继承关系。

新定义的类称为子类,它可以从父类那里继承所有非private的成员作为自己的成员。

子类的创建:* 格式:class SubClass extends SuperClass* {* .* .* .* }2.调用父类中特定的构造方法在没有明确地指定构造方法时,子类还是会先调用父类中没有参数的构造方法,以便进行初始化的操作。

在子类的构造方法中可以通过super()来调用父类特定的构造方法。

例://以Person作为父类,创建学生子类Student,并在子类中调用父类里某指定的构造方法。

class Person2{private String name;private int age;public Person2()//定义Person2类的无参构造方法{System.out.println("调用了Person2类的无参构造方法");}public Person2(String name,int age)//定义Person2类的有参构造方法{System.out.println("调用了Person2类的有参构造方法");=name;this.age=age;}public void show(){System.out.println("姓名:"+name+" 年龄:"+age);}}class Student2extends Person2//定义继承自Person2类的子类Student2{private String department;public Student2()//定义Student2类的无参构造方法{System.out.println("调用了学生类的无参构造方法Student2()");}public Student2(String name,int age,String dep)//定义Student2类的有参构造方法{super(name,age);//调用父类的胡参构造方法department=dep;System.out.println("我是"+department+"学生");System.out.println("调用了学生类的有参构造方法Student2(String name,int age,String dep)");}}public class App8_2 {public static void main(String[] args){Student2 stu1=new Student2();//创建对象,并调用无参构造方法Student2 stu2=new Student2("李小四",23,"信息系");//创建对象并调用有参构造方法stu1.show();stu2.show();}}/*在子类中访问你类的构造方法,其格式为super(参数列表)。

抽象类java

抽象类java

抽象类java一、基本概念在java 中也可以创建一种类专门用来当做父类,这种类称为“抽象类”。

抽象类的作用类似“模板”,其目的是要设计者依据它的格式来修改并创建新的类,但是不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。

但是在抽象类的使用中同样存在单继承的局限,即一个子类只能继承一个抽象类抽象类的定义及使用规则:(1)包含一个抽象方法的类必须是抽象类(2)抽象类和抽象方法都要使用abstract 关键字声明(3)抽象方法只需声明而不需要实现(4)抽象类必须被子继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法抽象类的定义格式:abstract class 抽象类名称{属性;访问权限返回值类型方法名称(参数){//普通方法return 返回值;}访问权限abstract 返回值类型方法名称(参数);//抽象方法//在抽象方法中是没有方法体的}可以看出抽象类的定义比普通类多了一些抽象方法,其他地方与普通类的组成基本都是一样的。

二、代码示例abstract class A{public static final String FLAG = "CHINA";private String name = "Java";public String getName(){//设置姓名return name;}public void setName(String name){//取得姓名 = name;}public abstract void print();//定义抽象方法}此处由于定义了print() 的抽象方法,所以此类的声明为abstract class。

此时可以编写一个子类继承此抽象类,需要注意子类必须覆写抽象类中的全部抽象方法class B extends A{//继承抽象类,覆写全部抽象方法public void print(){System.out.println("FLAG = " + FLAG);System.out.println("姓名:" + super.getName());}}public class Test{public static void main(String[] args) {B b = new B();//实例化子类对象b.print();//调用被子类覆写过的方法}}三、思考(1)一个抽象类可以使用final关键字吗?已知一个类如果使用了final 关键字声明,则不能被子类继承,而抽象类又必须被子类覆写,所以,抽象类不能使用final 关键字此外使用abstract 关键字修饰抽象方法时不能使用private 修饰,因为抽象方法必须被子类覆写,而如果使用了private 声明,则子类是无法覆写的(2)一个抽象类可以定义构造方法吗?在一个抽象类中是允许存在构造方法的,因为抽象类依然使用的是类的继承关系,而且抽象类也存在各个属性,所以子类在实例化之前必须先要对父类进行实例化abstract class A{public A(){System.out.println("A、抽象类中的构造方法。

JAVA抽象类

JAVA抽象类
abstract 关键字修饰的方法必须被其子类重写才有意义,否则这个方法半永远不会有方 法体,因此 abstract 方法不能定义为 private 访问权限,即 private 和 abstract 不能同时使用。
抽象类的作用
从前面的示例程序可以看出,抽象类不能创建实例,它只能当成父类来被继承,从语义的角 度来看,抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相 同特征的类中抽象的出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类设计 的随意性。
return a+b+c; }
//重写 Shape 类的返回形状的抽象方法 public String getType() {
return "三角形";
} }
上面的 Triangle 类继承了 Shape 抽象类,并实现了 Shape 类中两个抽象方法,是一个普通类, 因此可以创建 Triangle 类的实例,可以让一个 Shape 类型的引用变量指向 Triangle 对象
abstract 不能用于修饰属性,不能用于修饰局部变量,即没有抽象变量,没有抽象属性等说 法;abstract 也不能用于修饰构造器,没有抽象构造器,抽象类里定义的构造器只能是普通构
造器。
另外我们要记住,当使用 static 来修饰一个方法时,表明这个方法属于当前类,即 该方法可以通过类来调用,如果该方法被定义成抽象方法,则将导致通过该类来调用该方法 时出现错误(调用了一个没有方法体的方法肯定会引起错误),因此 static abstract 不能同时 修饰某个方法,即没有所谓的类抽象方法。
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类 的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方式。

Java抽象类详解

Java抽象类详解

Java抽象类详解 在中,介绍了抽象⽅法与接⼝,以及做了简单的⽐较。

这⾥我想详细探讨下抽象类。

⼀、抽象类的定义 被关键字“abstract”修饰的类,为抽象类。

(⽽且,abxtract只能修饰类和⽅法) 下⾯显⽰了⼀个最简单的空抽象类public abstract class AbstractClass {public static void main(String[] args) {AbstractClass abstractClass=new AbstractClass();}} 当对这个空的抽象类进⾏实例化时,编译器会报错: 'AbstractClass' is abstract; cannot be instantiated' 现在对这个抽象类进⾏扩展,添加属性和⽅法:public abstract class AbstractClass {public int constInt = 5;/*重载method()*/public void method() { }//没有编译错误public abstract void method(int a);public static void main(String[] args) {AbstractClass abstractClass=new AbstractClass() {@Overridepublic void method(int a) {System.out.println("实例化抽象类");}};System.out.println(abstractClass.constInt);abstractClass.method(5);}}//运⾏结果/* 5 实例化抽象类*/ 在这个抽象类中我添加了⼀个实例属性,⼀个抽象⽅法,以及该抽象⽅法的重载实例⽅法,这些都是合法的。

在main⽅法中,直接对抽象类通过new操作符进⾏实例化,出乎意料的是,IDE直接提⽰了这种操作——这⾥⽣成了⼀个(Anonymous Inner)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

抽象方法java
在Java中,抽象方法是一种没有具体实现的方法,只有方法的声明但没有方法体。

它需要被子类继承并实现具体的方法体。

在定义抽象方法时,需要使用
`abstract`关键字来修饰方法。

例如:
java
public abstract void methodName();
抽象方法必须在抽象类或接口中声明。

一个类中如果包含了抽象方法,那么该类必须被声明为抽象类。

抽象类是不能被实例化的,只能作为父类被继承。

子类必须实现其父类的所有抽象方法,否则子类也必须声明为抽象类。

具体的实现细节由子类提供。

抽象方法的好处是可以使代码更具有灵活性和可扩展性。

通过在父类中定义抽象方法,我们可以将具体的实现细节留给子类完成,从而实现不同子类间的差异化处理。

另外,抽象方法也可以用于接口中。

在接口中的抽象方法没有具体实现,所有实现该接口的类都必须实现该方法。

总结一下,抽象方法是一种没有具体实现的方法,只有方法的声明。

它需要被子
类或实现接口的类实现具体的方法体。

通过使用抽象方法,我们可以实现多态性和代码的重用。

相关文档
最新文档