文档库 最新最全的文档下载
当前位置:文档库 › 2016-05-29 Java 类、抽象类与继承

2016-05-29 Java 类、抽象类与继承

JAVA类的继承实验报告

《面向对象程序设计》实验报告 实验六、类的继承 课程代码:1H10500学分:6 实验类型:实践型实验学时:4个学时 实验时间:2017.11.23 实验地点:5407 班级:计算机164 专业:计算机科学与技术专业学号:2016011147 姓名:林文辉 一、实验目的 (1)学习JAVA继承的思想 (2)了解JAVA语言继承的实现 二、实验内容及步骤 内容:在圆柱体类Cylinder里,用一个构造方法调用另一个构造方法 步骤:方案的设计与分析(类结构图。。。。。。) (1)找出对象的共同属性和行为 (2)设计代表共同状态与行为的类 (3)决定子类是否需要让某项行为有特定的不同的运行方式 (4)寻找更多抽象化的机会 (5)完成类的继承层次 三、实验过程及结果 实验1代码: abstract class Graphics { abstract void parameter(); abstract void area(); } class Rectangle extends Graphics{ double h,w; Rectangle(double u,double v){h=u;w=v;} void parameter() { S ystem.out.println("矩形高度为:"+h+",矩形宽度为:"+w); } void area() { S ystem.out.println("矩形面积为:"+(h*w)); } }

class Circle extends Graphics{ double r; String c; Circle(double u,String v){r=u;c=v;} void parameter() { System.out.println("圆半径为:"+r+",圆颜色为:"+c); } void area() { System.out.println("圆面积为:"+(Math.PI*r*r)); } } class ExamAbs{ public static void main(String args[]) { Rectangle rec=new Rectangle(2.0, 3.0); Circle cir=new Circle(4.0, "Red"); Graphics[]g= {rec,cir}; for(int i=0;i

Java 接口与类之间继承例题

1,定义一个接口Assaultable(可攻击的),该接口有一个抽象方法attack()。 2,定义一个接口Mobile(可移动的),该接口有一个抽象方法move()。 3,定义一个抽象类Weapon,实现Assaultable接口和Mobile接口,但并没有给出具体的 实现方法。 4,定义3个类:Tank,Flighter,WarShip都继承自Weapon,分别用不同的方式实现Weapon 类中的抽象方法。 5,写一个类Army,代表一支军队,这个类有一个属性是Weapon数组w(用来存储该军队所拥有的所有武器);该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。 6,写一个主方法去测试以上程序。 interface Assaultable{//可攻击的 void attack(); } interface Mobile{//可移动的 void move(); } abstractclass Weapon implements Assaultable,Mobile { publicvoid attack(){} publicvoid move(){} } class Tank extends Weapon{ publicvoid attack(){ System.out.println("坦克攻击!!!"); } publicvoid move(){ System.out.println("坦克移动!!!"); } } class Flighter extends Weapon{ publicvoid attack(){ System.out.println("战斗机攻击!!!"); } publicvoid move(){ System.out.println("战斗机移动!!!");

接口和抽象类的区别

.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。 接下来先说说抽象类和接口的区别。 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。 区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 例如: public abstract class AbsTest { public virtual void Test() { Debug.WriteLine( "Test" ); } public abstract void NewTest(); } public interface ITest {

void Test(); void NewTest(); } 区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。 知道了两者的区别,再来说说,接口相对于抽象类的优势。 好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。 好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。 好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。 好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

接口和抽象类习题-答案

(一)选择题 1.以下哪个接口的定义是正确的? A.interface B{ void print() { } ; } B.abstract interface B { void print() ; } C.abstract interface B extends A1,A2 { abstract void print(){ }; } D.interface B { void print();} 2.定义一个接口时,下列哪个关键字用不到? A.public B.extends C.interface D.class 3.定义一个接口时,要使用如下哪个关键字? A.abstract B.final C.interface D.class 4.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口。 A.private B.protected C.private或者protected D.public 5.下列类头定义中,错误的是? A.public x extends y B.public class x extends y C.class x extends y implements y1 D.class x 6.下列类定义中,不正确的是? A.class x B.class x extends y C.class x implements y1,y2 D.public class x extends X1,X2 7.Java中能实现多重继承功能的方式是? A.接口 B.同步 C.抽象类 D.父类 8.下列叙述正确的是? A.Java中允许多重继承 B.Java一个类只能实现一个接口 C.Java中只能单重继承 D.Java中一个类可以继承多个抽象类 (二)简答题

java 类的继承 实验报告(含代码)

实验三类的继承 实验目的:掌握类的继承、抽象类的定义和使用、对象的向上转型。实验内容:已知若干图形,求以该图形为底的锥体的体积。 实验要求:用面向抽象的思想实现 实验步骤: 1、程序总体框架 2、在shape包中创建抽象类Shape,代码如下: 3、在centrun包中创建一个类Centrun,代码如下:

Centrun这个类为核心类,在之后的代码编写中可以不做更改,getVolume函数用来求椎体的体积,即利用抽象类getArea进行适应性计算。 4、创建一个包myshape,在其中先创建一个Circle类,代码如下:

Circle是对抽象类shape的继承(记得导入shape包),在Circle类中,利用对getArea 函数代码的重写操作,具体实现了求圆的面积这一操作。【此处的具体实现应该放入该图形的具体面积求法。】 5、创建一个包Test,对以上三个包中的代码进行具体实现,代码如下: 导入myshape包,在main函数中通过向上转型,实例化shape包中的抽象类Shape,然后调用函数输出圆锥的体积。 6、在求出实验结果1,即调试好shape、myshape、centrun这三个包后,不再更改shape、centrun包,而是在myshape包下新建所需的类,如本次实验所需的三角形、矩形; 7、在myshape包下创建一个类Rectangular,代码如下:

8、在myshape包下创建一个类Triangle,需注意的是,求三角形的面积需要判断三角形的三边能否构成三角形(不能构成时返回0),代码如下:

实验结果: 1、Test测试包最终代码:

接口和抽象类习题-答案

一)选择题 1. 以下哪个接口的定义是正确的? A. interface B{ void print() { } ; } B. abstract interface B { void print() ; } C. ab stract interface B extends A1,A2 { abstract void print(){ }; } D. interface B { void print();} 2. 定义一个接口时,下列哪个关键字用不到? A. public B. extends C. interface D. class 3. 定义一个接口时,要使用如下哪个关键字? A. abstract B. final C. interface D. class 4. 在使用interface 声明一个接口时,只可以使用哪个修饰符修饰该接口。 A. private B. protected C. private 或者protected D. public 5. 下列类头定义中,错误的是

A. public x extends y B. public class x extends y C. class x extends y implements y1 D. class x 6. 下列类定义中,不正确的是? A. class x B. class x extends y C. class x implements y1,y2 D. public class x extends X1,X2 7. Java 中能实现多重继承功能的方式是? A. 接口 B侗步 C. 抽象类 D. 父类 8. 下列叙述正确的是? A. Java 中允许多重继承 B. Java 一个类只能实现一个接口 C. Java 中只能单重继承 D. Java 中一个类可以继承多个抽象类 (二)简答题 1) 接口中方法的修饰符都有哪些?属性的修饰符有哪些? 2) 接口的作用是什么?简述接口与类的关系。

C#抽象类和接口的区别

C#抽象类和接口的区别

c#接口和抽象类的区别大家都容易把这两者搞混,我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料. 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 二、接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 另外,接口有如下特性: 接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 三、抽象类和接口的区别: 1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 3.一个类一次可以实现若干个接口,但是只能扩展一个父类 4.接口可以用于支持回调,而继承并不具备这个特点. 5.抽象类不能被密封。 6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。 8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。 9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。 10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!

java中继承的相关知识总结

JAVA中继承的总结 一、继承概念: 把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系, 这多个类就具备了这些内容。这个关系叫继承。 二、何时实现继承 A:继承体现的是:is a的关系。 B:采用假设法 三、怎么实现继承 A:用关键字extends表示 B:格式: class 子类名 extends 父类名 {} C:子类 public class 子类 extends 父类 { //增加自己属性 //重写父类的属性 //增加自己的方法 //重写父类的方法 } 四、继承的好处: A:提高了代码的复用性 B:提高了代码的维护性

C:让类与类产生了一个关系,是多态的前提 继承的弊端: A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。 原则:低耦合,高内聚。 耦合:类与类的关系 内聚:自己完成某件事情的能力 B:打破了封装性 五、Java中继承的特点 A:Java中类只支持单继承,只能一个直接父类,Object 根类 B:Java中可以多层(重)继承(继承体系) 六、继承的注意事项: A:子类能继承父类的私有成员,但不是都能访问 B:子类不能继承父类的构造方法,但是可以通过super去访问 C:不要为了部分功能而去继承 七、继承中static用法 A:static:子类可以继承父类的静态方法,但不能重写 B:static 的属性和方法都是不能覆盖的,因为static修饰的部分都是与对象无关的,只与类有关 八、Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单 b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?

抽象类与接口的区别

抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。 一、理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。 在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。 二、从语法定义层面看abstract class和interface 在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。使用abstract class的方式定义Demo抽象类的方式如下: java 代码 abstract class Demo { abstract void method1(); abstract void method2(); …

(完整版)毕设外文翻译-详细解析Java中抽象类和接口的区别

Parsing Java Abstraction of the Difference Between Classes and Interfaces In Java language, abstract scale-up and with support class abstraction definition of two mechanisms. Because of these two kinds of mechanism of existence, just gives Java powerful object-oriented skills. Abstract scale-up and with between classes abstraction definition for support has great similarities, even interchangeable, so many developers into line non-abstract class definition for abstract scale-up and it is becoming more casual with choice. In fact, both between still has the very big difference, for their choice even reflected in problem domain essence of understanding, to design the intentions of the understanding correctly and reasonable. This paper will for the difference analysis, trying to give a developer with a choice between them are based. Understand class abstraction Abstract class and interface in Java language is used for abstract classes (in this article non-abstract class not from abstract scale-up translation, it represents an abstract body, and abstract scale-up for Java language used to define class abstraction in one way, please readers distinguish) defined, then what are the abstract classes, use abstract classes for us any good? In object-oriented concept, we know all objects is through class to describe, but in turn not such. Not all classes are used to describe object, if a class does not contain enough information to portray a concrete object, this class is abstract classes. Abstract classes are often used to characterization of problem field in our analysis, design that the abstract concepts, is to the series will look different, but essentially the same exact conception of abstraction. For example: if we carry out a graphical editing software development, will find problem domain exists round, triangle so some specific concept, they are different, but they all belong to shape such a concept, shape this concept in problem domain is not exist, it is an abstract concept. Precisely because the abstract concepts in problem field no corresponding specific concept, so to characterization abstract concepts non-abstract class cannot be instantiated. In an object-oriented field, mainly used for class abstraction types hidden. We can

JAVA继承类求几何图形面积周长代码

class shap2D { static double getArea; //面积 static double getPerimeter; //周长 } class circle extends shap2D { double r; double getRadius(){return r=2;} double getArea() {return Math.PI*r*r;} double getPerimeter() {return 2*Math.PI*r;} public String toString() { String s; return s="周长:"+getPerimeter()+"面积:"+getArea(); } } class Triangle extends circle { double a,b,c; Triangle (double x,double y,double z) {a=x; b=y;c=z;} void setA(double x){a=x;} double getA(){return a;} public double getPerimeter() {return a+b+c;} public double getArea() { double s=(a+b+c)/2; return Math.sqrt(s*(s-a)*(s-b)*(s-c)); } public boolean isTriangle() { boolean flag=false; if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&c+b>a) flag=true; return flag; } } class rectangle extends circle { double a,b;

Java面试问题:抽象类与接口的区别.

Java面试问题:抽象类与接口的区别2019-01-01 很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题, 。本文我们将仔细讨论这些话题。 在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。 抽象类 抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet 为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { // abstract method abstract void service(ServletRequest req, ServletResponse res); void init() { // Its implementation } // other method related to Servlet } 当HttpServlet类继承GenericServlet时,它提供了service方法的实现: public class HttpServlet extends GenericServlet { void service(ServletRequest req, ServletResponse res) { // implementation } protected void doGet(HttpServletRequest req, HttpServletResponse resp) { // Implementation } protected void doPost(HttpServletRequest req, HttpServletResponse resp) { // Implementation } // some other methods related to HttpServlet } 接口 接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable 接口为例: public interface Externalizable extends Serializable { void writeExternal(ObjectOutput out) throws

面向对象--接口与抽象类、对象和接口(通俗讲解)

面向对象--接口与抽象类的恩恩怨怨 接口与抽象类是面向对象编程中两个非常重要的角色,二者各自起着非常重要的作用。但是很多初学的朋友往往会对使用接口还是抽象类存在的很大的迷惑。就我自己的一点心得,发表一下拙见。 面向对象的一些回顾: 面向对象世界中有一个古老的法则:接口隔离原则,指的是不要把多个功能全部都集中在一个接口里面。接口实现的功能要相对单一;衍生开来可以得到另外一个结论:对一组或者称一系列功能的实现,尽量定义相对功能单一的小模块来实现这一组功能。这其实也是解耦和的体现。 那这跟我们的接口和抽象类有什么关系呢?那又得摆出另外一个法则:依赖倒置原则,针对接口编程而不是针对实现编程。 说到这,又会有一个新的问题蹦出来,这是自相矛盾啊,既然要针对接口编程还要抽象类干吗使?我们经常说面向对象,面向对象是来源于生活的。是人们要把对现实世界中的一系列方法论应用到程序设计当中来。从对象这一概念的引入我们就可以揣摩这一点。人类社会中有很多对象的概念,人、车、物体。不幸的是用程序来实现这些对象比在概念上定义对象要难很多。 (如果能达成这一共识,您可以继续往下看,否则就请看官您移步至留言讨论吧) MS给出开发者的建议是,用抽象类来实现接口。子类再继承基类。 实例说明: 为什么要这么建议?OK,我们试着结合实际来说明一下这个问题吧。我们要造车。这个车有个基本的属性就是能移动、还必须有轮子。那我们就设计一个接口 1public interface ICar 2 { 3 string Wheel 4 { 5 get; 6 set; 7 } 8 void Move(); 9 } 10

接下来的事情,就是实现了。造什么车都行,继承一下就行。随着科技的发展,我们的车想要飞了。此时当然不能修改这个接口,因为要遵循开闭原则。为什么要遵循?我们可以想一下,人坐上飞机能飞上天。但是也没见谁认为人有会飞这个特性的。那也好办,不许修改,那我再加一个接口。 1interface IFlyable 2 { 3 void Fly(); 4 } 5 好,我们的飞行汽车最后应该是这样的。 1class FlyCar : ICar,IAerocraft 2 { 3 private string wheel = string.Empty; 4 5 public void Fly() 6 { 7 Console.WriteLine("{0}车飞起来了",this.wheel); 8 } 9 public string Engine 10 { 11 get 12 { 13 return wheel; 14 } 15 set 16 { 17 wheel = value; 18 } 19 } 20 21 public void Move() 22 { 23 Console.WriteLine("{0}轮车在走",this.wheel); 24 } 25 } 26 看起来很不错,车能飞能走了。那它现在他的祖宗到底车还是飞行器呢?我们自己在心里辩论一下吧。估计不是很容易辩清楚。 我们前面说过,面向对象的思想来源于现实生活。如果把这组例子引入到现实中来,造会飞的汽车。肯定是要在原有的汽车上面下功夫。比如你装上喷气动力装置,或者装上翅膀。

抽象类和接口的相同和异同点

抽象类和接口的相同和异同点 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 在编写对象的时候会对一些类的方法进行定义。但是并没有具体的实现。而是把它们放到子类中去实现,具有灵活性。在抽象类中可以有抽象方法,也可以没有抽象方法。但是有了抽象方法的类一定是抽象类。 抽象类和接口在JA V A中都是用来表述抽象类的。 在面向对象的概念,所以的对象都是通过类来描述的。但反之则不行。若是一个类中没有包含足够的信息描绘一个具体的对象,这个的类就是抽象类。 在JA V A中除了使用抽象类来实现一定程度的抽象外还可以定义一种特殊的抽象方法----接口(interface)。和抽象类的方法不一样,在抽象类中需要加上关键字abstract来表明某个方法是抽象的,但是在接口中则不需要。 相同点: 1.他们都能不能生成实例,都有抽象方法。 2接口是特殊的抽象类。 3.接口和抽象类的继承都使用的关键字是extends。 不同点: 1.接口的定义的变量默认是public static final型,且必须给其赋初值。所以在实现类中不能重新定义,也不能改变其值。而在抽象类中其值在子类中可以重新定义也可以重新赋值。 2.接口的方法默认的都是public abstract类型的。 3.抽象类中可以有构造器,但是接口中除了抽象方法什么都没有。 4.名字不同,接口写的是public interface Shape{}; 而抽象类写的是public abstract class Shape{}; 接口里全部都是抽象方法。而抽象类里可以有抽象方法也可以有其他的方法。接口里的属性都是静态的。但是抽象类的属性可以是任意的。 5.还可以从继承的角度看,接口可以多继承,一个接口可以继承多个接口。但是抽象类却不能,只能是继承一个父类,不能继承多个父类。要是能继承多个父类的话会在父类和子类的方法中有发生冲突。

java练习题-继承

一.extends和super的使用和方法的重写 1.定义一个人的类(属性有名字,年龄。写一个能输出各个属性值 的方法showInfo()),定义一个学生类(属性有性别),学生继承人类 要求:(1)父类的属性赋值用构造方法来实现(分别用有参数构造方法和无参数构造方法实现) (2)子类的属性也用构造方法来赋值。 (3)在子类中重写父类的showInfo()方法 (4)声明学生类的对象,调用学生的显示信息的方法。 2 定义Animal父类,含有属性name,sex,age,方法sleep,run,编写一个子类Person,继承Animal类,然后调用父类的属性和方法二. 1、试编写三个具有继承关系的类,A、B、C(B继承A,C继承B)。 要求A中包含方法a1()、a2(),B类中的方法b1()访问了a1() 和a2(),C类中的方法c1()访问了a1()、a2()、b1()。 提示:(a1(),a2(),b1(),c1()这些方法体除了实现题目要求之外,其余内容可以任意编写。) 2、请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉(sleep) 动物包括:兔子(Rabbit),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡

觉的行为是一致的。 请通过继承实现以上需求,并编写测试类AnimalTest进行测试。3、父类Person 包含like()方法子类Son 重写父类方法并打印输出 4、(选做)父类Employee 属性:name、sex ,带一个构造方法Employee(String n, char s) 子类Worker继承自Employee 属性:char category;法()可以调用父类 的所有非私有方法 B) super()可以调用父类的所有非私有构造函数 C) super.属性可以调用父类的所有非私有属性 D) this和super关键字可以出现在同一个构造函数中 8.以下关于final关键字说法错误的是(A,C)(两项) A) final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性 B) final修饰的类肯定不能被继承 C) final修饰的方法不能被重载 D) final修饰的变量不允许被再次赋值 9.访问修饰符作用范围由大到小是(D) A) private-default-protected-public B) public-default-protected-private C) private-protected-default-public D) public-protected-default-private 10.以下(D)不是Object类的方法 A) clone() B) finalize() C) toString() D) hasNext() 11.多态的表现形式有(A) A) 重写 B) 抽象 C) 继承 D) 封装 12.以下对重载描述错误的是(B)

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类的子类,并实现

Java中类的继承

Java中类的继承 1、方法重载 重载方法必须满足以下条件: #方法名相问. #方法的参数类型、个数、顺序至少有一项不相同。 #方法的返回类型可以不相同。 #方法的修饰符可以不相同. 方法覆盖 (1)子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致. (2)子类方法不能缩小父类方法的访问权限. (3)子类方法不能抛出比父类方法史多的异常, (4)方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间.在同一个 类中方法只能被重载,不能被扭盖。 (5)父类的静态方法不能被子类覆盖为非静态方法。 (6)子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法.在编译时,子类定义的静态方法也必须满足与方法覆盖类似的约束。 (7)父类的非静态方法不能被了类覆盖为静态方法。 (8)父类的私有方法不能被子类覆盖。 (9)父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法:二是子类重新声明父类的抽象方法。 (10)父类的非抽象方法可以被覆盖为抽象方法. 方法覆盖与方法重载的异同 方法覆盖和方法重载具有以下相同点: #都要求方法同名. #都可以用于抽象方法和非抽象方法之间. 方法筱盖和方法重载具有以下不同点: #.方法覆盖要求参数签名必须一致.而方法重载要求参数签名必须不一致.

#.方法覆盖要求返回类型必须一致,而方法重载对此不做限制. #.方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方d (包括从父类中继承而来的方法)。 #.方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这力面没有任何限制。 #.父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次。 super关键字 super和this关键字都可以用来履盖Java语言的默认作用域.使被屏蔽的方法或变 盆变为可见。在以下场合会出现方法或变量被屏蔽的现象. .场合一:在一个方法内.当局部变量和类的成员变量同名,或者局部变量和父类的成员变量同名时,按照变量的作用域规则,只有局部变量在方法内可 见。 .场合二:当子类的某个方法覆盖了父类的一个方法。在子类的范围内,父类 的方法不可见. .场合三:当子类中定义了和父类同名的成员变量时,在子类的范围内,父类 的成员变量不可见。 在程序中,在以下情况下会使用super关键字: #在类的构造方法中,通过super语句调用这个类的父类的构造方法。 #在子类中访问父类的被屏蔽的方法和属性。 多态性 它是指当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务, 而这一切对系统A是透明的. 多态的各种特性 (1)对于一个引用类型的变量,Java编译器按照它声明的类型来处理. (2)对于一个引用类型的变盆.运行时Java虚拟机按照它实际引用的对象来处理.例如以下代码虽然编译可以通过,但运行时会抛出ClassCastException运行时异常. Sub sub=new Sub();

相关文档