- 1 -
图形关系报告
关系简介
我们选取了Shape 为根类,所有图形均以Shape类为父类,继承Shape类的两个方法:draw(),eraser().其他图形间以包含关系为主,复杂图形由一个或者若干个简单图形,再添加新的属性所组成.
同时,引入两个接口类AresCountable, VolumeCountable.分别提供面积计算和体积计算的方法接口.
关系图
此符号表示组成~ 此颜色框表示新增加属性
接口简介
AresCountable
此接口用于可计算面积的图形,提供一个计算面积的方法.
接口定义
public interface AresCountable
接口方法
public double getAres();
VolumeCountable
此接口用于可计算体积的图形,提供一个计算体积的方法接口. 接口定义
public interface VolumeCountable
接口方法
public double getVolume();
各个类的简介
Shape
Shape类使所有后面图形类的父类.定义为抽象类,其中包含两个抽象函数,等待后面继承类具体实现.
类定义
public abstract class Shape
// 定义为抽象类
构造函数
无
成员
无
方法
public abstract void draw();
public abstract void eraser();
// 定义两个抽象函数,等待以后的继承类实现.
Point类是这次图形集成结构的最基本的可实现类,以后的平面图形和立体图形均由Point类组成. 类定义
public class Point extends Shape
// 继承抽象类Shape
成员
private double x,y;// 点的横纵坐标
构造函数
public Point(double x, double y) //由坐标构造点
public Point(Point p) //由一个已知点构造点
方法
public double getX()
public double getY()
@Override
public void draw()
@Override
public void eraser()
// 对Shape 类里两个抽象函数进行实现,并在以后的继承类里将被重写
Line 类,包含两个Point成员,作为起点和终点.
类定义
public class Line extends Shape
成员
private Point p1,p2;// 分别为起点和重点.
构造函数
public Line(double x, double y, double x1,double y1) public Line(Point p1,Point p2)
方法
public Point getP1()
public Point getP2()
public double getLength()
// 调用此函数,返回该对象先端的长度
public static double getLength(Point a,Point b)
// 调用这个类函数,将返回计算参数中两个点的距离
@Override
public void draw()
@Override
public void eraser()
Rectangle
Rectangle类,矩形,包含一个Point 类成员,作为左上角的定位点,新增成员长和宽. 引入AresCountable 接口,获得计算面积的能力.
类定义
public class Rectangle extends Shape implements AresCountable 类成员
private double length,width;
private Point p;
构造函数
public Rectangle(double x,double y,double length,double width) public Rectangle(Point p,double length,double width)
public Rectangle(Rectangle q)
方法
public Point getP()
public double getL()
public double getW()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getAres()// 返回该对象的面积
Cuboid 类,立方体,包含一个Rectangle 类对象,作为地面,新增成员高.
引入VolumeCountable 接口,获得计算面积的能力.
类定义
public class Cuboid extends Shape implements VolumeCountable 类成员
private Rectangle p;
private double h;
构造函数
public Cuboid(Rectangle p,double h)
方法
public double getHeight()
public Rectangle getRectangle()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getVolume() // 返回该对象的体积.
Circle 类,圆形,包含一个Point 类对象,作为圆心,新增成员半径.
引入接口AresCountable 接口,获得计算面积的能力.
类定义
public class Circle extends Shape implements AresCountable 类成员
private Point p;
private double r;
构造函数
public Circle(double x, double y, double r)
public Circle(Point p, double r)
public Circle(Circle c)
方法
public Point getP()
public double getR()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getAres() // 返回该对象的面积
Cylinder
Cylinder 类,圆柱体,包含一个Circle 类对象,作为地面,新增成员高.
引入VolumeCountable 接口,获得计算体积的能力.
类定义
public class Cylinder extends Shape implements VolumeCountable 类成员
public double h;// 新增成员高.
构造函数
public Cylinder(double x, double y, double r,double h)
public Cylinder(Circle c, double h)
方法
public Circle getCircle()
public double getH()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getVolume()// 返回该对象的体积.
Ball
Ball 类,球体,包含一个Circle 类对象.Ball类由一个圆以直径为轴旋转一周得到. 引入VolumeCountable 接口,获得计算体积的能力.
类定义
public class Ball extends Shape implements VolumeCountable
类成员
private Circle c;
构造函数
public Ball(Circle c)
方法
public double getR()
public Point getP()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getVolume()// 返回该对象的体积.
Polygon 类,多边形,由一个Point 类数组构成.新增成员点的数目.
引入接口AresCountable 接口,获得计算面积的能力.
类定义
public class Polygon extends Shape implements AresCountable 类成员
private int n;
private Point p[];
构造函数
public Polygon(int n)
public Polygon(Polygon poly)
方法
public int getN()
public Point[] getPoints()
public Point getAPoint(int i)
@Override
public void draw()
@Override
public void eraser()
@Override
public double getAres()// 返回该对象的面积
Gengon 类,多边棱柱,包含一个Polygon 类,作为底面,新增成员高.
引入VolumeCountable 接口,获得计算体积的能力.
类定义
public class Gengon extends Shape implements VolumeCountable 类成员
private double h;
private Polygon p;// 多边棱柱的高
构造函数
public Gengon(int n, double h)
public Gengon (Polygon poly, double h)
public Gengon(Gengon g)
方法
public Polygon getPoly()
public double getHeight()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getVolume() // 返回该对象的体积.
Ellipse 类,椭圆,包含一个Point 类对象作为一个焦点, 新增成员椭圆的长轴和短轴. 引入接口AresCountable 接口,获得计算面积的能力.
类定义
public class Ellipse extends Shape implements AresCountable
类成员
private double a,b;
private Point p;
构造函数
public Ellipse(double x, double y, double a, double b) {
public Ellipse(Point p, double a, double b)
public Ellipse(Ellipse e)
方法
public Point getP()
public double getA()
public double getB()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getAres() // 返回该对象的面积
EllipticCylinder
EllipticCylinder 类,椭圆柱,包含一个Shape类对象作为底面,新增成员高.
引入VolumeCountable 接口,获得计算体积的能力.
类定义
public class EllipticCylinder extends Ellipse implements VolumeCountable 类成员
private double h;
private Ellipse e;
构造函数
public EllipticCylinder(double x, double y, double a, double b, double h) public EllipticCylinder(Point p, double a, double b, double h)
public EllipticCylinder(Ellipse e, double h)
方法
public Ellipse getEllipse()
public double getHeight()
@Override
public void draw()
@Override
public void eraser()
@Override
public double getVolume() // 返回该对象的体积.
1 第1章面向对象软件开发概述 2 1.简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向3 过程的编程语言各两种。 4 答:面向过程问题求解,以具体的解题过程为研究和实现的主体,其思维特点更5 接近于计算机;面向对象的问题求解,则是以“对象”为主体,“对象”是现实世6 界的实体或概念在计算机逻辑中的抽象表示,更接近于人的思维特点。 7 面向过程的编程语言:C,Pascal, Foratn。 8 面向对象的编程语言:C++, Java,C#。 9 2.简述对象、类和实体及它们之间的相互关系。尝试从日常接触到的人或物中抽10 象出对象的概念。 11 答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中12 的映射和体现。类是同种对象的集合与抽象。类是一种抽象的数据类型,它是所有13 具有一定共性的对象的抽象,而属于类的某一个对象则被称为是类的一个实例,是14 类的一次实例化的结果。如果类是抽象的概念,如“电视机”,那么对象就是某一15 个具体的电视机,如“我家那台电视机”。 16 3.对象有哪些属性?什么是状态?什么是行为?二者之间有何关系?设有对象“学17 生”,试为这个对象设计状态与行为。 18
答:对象都具有状态和行为。 19 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是20 变量。每个对象个体都具有自己专有的内部变量,这些变量的值标明了对象所处的21 状态。 22 行为又称为对象的操作,它主要表述对象的动态属性,操作的作用是设置或改变23 对象的状态。 24 学生的状态:姓名、性别、年龄、所在学校、所在系别、通讯地址、电话号码、25 入学成绩等; 26 学生的行为:自我介绍、入学注册、选课、参加比赛等。 27 4.对象间有哪三种关系?对象“班级”与对象“学生”是什么关系?对象“学生” 28 与对象“大学生”是什么关系? 29 答:对象间可能存在的关系有三种:包含、继承和关联。 30 对象“班级”与对象“学生”是包含关系。 31 对象“学生”与对象“大学生”是继承关系。 32 5.有人说“父母”和“子女”之间是继承的关系。这种说法是否正确?为什么? 33 答:“父母”和“子女”之间不是面向对象意义上的“继承”关系。因为这里的34
- 1 - 图形关系报告 关系简介 我们选取了Shape 为根类,所有图形均以Shape类为父类,继承Shape类的两个方法:draw(),eraser().其他图形间以包含关系为主,复杂图形由一个或者若干个简单图形,再添加新的属性所组成. 同时,引入两个接口类AresCountable, VolumeCountable.分别提供面积计算和体积计算的方法接口. 关系图 此符号表示组成~ 此颜色框表示新增加属性
接口简介 AresCountable 此接口用于可计算面积的图形,提供一个计算面积的方法. 接口定义 public interface AresCountable 接口方法 public double getAres(); VolumeCountable 此接口用于可计算体积的图形,提供一个计算体积的方法接口. 接口定义 public interface VolumeCountable 接口方法 public double getVolume();
各个类的简介 Shape Shape类使所有后面图形类的父类.定义为抽象类,其中包含两个抽象函数,等待后面继承类具体实现. 类定义 public abstract class Shape // 定义为抽象类 构造函数 无 成员 无 方法 public abstract void draw(); public abstract void eraser(); // 定义两个抽象函数,等待以后的继承类实现.
Point类是这次图形集成结构的最基本的可实现类,以后的平面图形和立体图形均由Point类组成. 类定义 public class Point extends Shape // 继承抽象类Shape 成员 private double x,y;// 点的横纵坐标 构造函数 public Point(double x, double y) //由坐标构造点 public Point(Point p) //由一个已知点构造点 方法 public double getX() public double getY() @Override public void draw() @Override public void eraser() // 对Shape 类里两个抽象函数进行实现,并在以后的继承类里将被重写
Java面向对象程序设计 清华大学出版社 (编著耿祥义张跃平) 习题解答 建议使用文档结构图 (选择Word菜单→视图→文档结构图)
习题1 1.James Gosling 2. (1)使用一个文本编辑器编写源文件。 (2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。 (3)使用J ava解释器(java.exe)运行Java程序 3.Java的源文件是由若干个书写形式互相独立的类组成的。 应用程序中可以没有public类,若有的话至多可以有一个public类。 4.系统环境path D\jdk\bin; 系统环境classpath D\jdk\jre\lib\rt.jar;.; 5. B 6.Java源文件的扩展名是.java。Java字节码的扩展名是.class。 7.D 8.(1)Speak.java (2)生成两个字节码文件,这些字节码文件的名字Speak.class 和Xiti8.class (3)java Xiti8 (4)执行java Speak的错误提示 Exception in thread "main" https://www.doczj.com/doc/4517794455.html,ng.NoSuchMethodError: main 执行java xiti8得到的错误提示 Exception in thread "main" https://www.doczj.com/doc/4517794455.html,ng.NoClassDefFoundError: xiti8 (wrong name: Xiti8) 执行java Xiti8.class得到的错误提示 Exception in thread "main" https://www.doczj.com/doc/4517794455.html,ng.NoClassDefFoundError: Xiti8/class 执行java Xiti8得到的输出结果 I'm glad to meet you 9.属于操作题,解答略。
JAVA面向对象基础测试题 提示:本题为第一阶段,JAVA面向对象基础部分练习题,包括对象,类,继承,封装,多态,接口,内部类等等,java核心基础,适合初学者对面向对象基础的知识进行测试,以便查漏补缺。 1. 程序执行的结果是:()。 01 public class Point{ 02 int y = 7; 03 public void step(int y) { 04 y += y; 05 System.out.println(y); 06 } 07 public static void main(String[] args) { 08
Point p = new Point(); 09 p.step(10); 10 } 11 } A.14 B.20 C.10 D.17 正确答案:B解析: 2. 程序的执行结果是:()。 01 public class Question { 02 private int num; 03 public static void main(String [] args){ 04 Question q = new Question();
05 q.num=13; 06 update(q); 07 System.out.println(q.num); 08 } 09 public static void update(Question q){ 10 q.num=9; 11 } 12 } A.13 B.9 C.0 D.4 正确答案:B解析: 3.
程序执行的结果是:()。 01 public class Answer { 02 public static void main(String[] args) { 03 int score = 20; 04 Answer ans= new Answer(); 05 ans.add(score); 06 System.out.println(" main:score = " + score); 07 } 08 void add(int score) { 09 System.out.println(" add:score=" + score++); 10 } 11
J a v a面向对象编程练习 题精编 Lele was written in 2021
Java面向对象编程练习题 专题1 初识Java 一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是(SE)、( EE )、( ME )。 2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置 Path为()、classpath为()。 3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展名为()。 4.如果Java源文件中有多个类,那么只能有一个类是()类。 5.Java程序可以分成两类,即()和()。 二、选择题 1.作为Java应用程序入口的main方法,其声明格式是(B )A.public static int main(String args[]) B.public static void main(String args[]) C.public void main(String args[]) D.public int main(String args[]) 2.下面命令正确的是(B) A.java B.java AppFirst
C.java D.javac AppFirst 3.设有一个Java小程序,源程序名为,其class文件为,则 运行该小程序的命令为(B) A.java FirstApplet B.javac C.appletviewer D.appletviewer 4.JDK安装完成后,主要的命令如javac、java等,都存放在 根目录的(A)文件夹下。 A.bin B.jre C.include D.doc 5.Java语言是一种 D 语言。 A.机器B.汇编C.面向过程的D.面向对象的 6、Java程序的最基本组成单位是 D 。 A.函数B.过程C.变量 D.类 三、简答题(十分重要) 1.Java语言有哪些特点 跨平台、一种简单、面向对象、分布式、半编译半解释、健 壮、安全、多线程 2.JDK安装完成后,如何设置环境变量 Path 配置:
CoreJavaOOP考试题 考试时间:90分钟 考试总分:100分 一、选择题(不定项选择)(22*4=88) 1. 类A,B的定义如下: class A { private int a = 100; A() { System.out.print("A()"); System.out.println(a); } } class B extends A { private int a = 200; B() { System.out.print("B()"); System.out.println(a); } } 运行下面的代码: new B(); 输出的结果是:(A )。 A. A() 100 B() 200 B. A() 200 B() 200 C. B() 200 A() 100 D. B() 200 A() 200
2.下列说法正确的是(D ) A.所有类都必须定义构造方法(构造器) B.构造方法必须初始化类的所有数据成员 C.子类定义了构造器后,不再调用父类的构造器 D.构造方法可以访问类的非静态成员 3.在Java中,哪个关键字使类不能派生子类?, (A ) A : final B : public C : private D : native 4.class Base{ static void test(){ System.out.println(“Base.test()”); } } public class Child extends Base{ static void test(){ System.out.println(“Child.test()”); } public static void main(String[] args){ Base base = new Child(); Child child = new Child(); base.test(); child.test(); } } 程序运行的结果是( C ) A.Child.test() Child.test() B.Child.test() Base.test() C.Base.test() Child.test() D.Base.test() Base.test()
1.面向对象的概念 面向对象(Object-Oriented)=对象(Object)+类(Class)+ 继承(Inheritance)+通信(Communication) 如果一个软件系统是使用这样4个概念设计和实现的,则将该软件系统称为面向对象的。下面给出每个概念的具体定义。 1.1 对象 从一般意义上讲,对象是现实世界中一个实际存在事物,它可以是有形的(比如一辆汽车),也可以是无形(比如一项计划)。对象构成世界的一个独立单位,它具有自己的静态特征和动态特征。静态特征即可用某种数据来描述的特征,动态特征即对象所表现的行为或对象所具有的功能。 现实世界中的任何事物都可以称作对象,它是大量的、无处不在的。不过,人们在开发一个系统时,通常只是在一定的范围(问题域)内考虑和认识与系统目标有关的事物,并用系统中的对象抽象地表示它们。所以面向对象方法在提到“对象”这个术语时,既可能泛指现实世界中的某些事物,也可能专指它们在系统中的抽象表示,即系统中的对象。我们主要对后一种情况讨论对象的概念,其定义是:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务构成。 属性和服务,是构成对象的两个主要因素,其定义是:属性是用来描述对象静态特征的一个数据项。服务是用来描述对象动态特征(行为)的一个操作序列。 一个对象可以有多项属性和多项服务。一个对象的属性和服务被结合成一个整体,对象的属性值只能由这个对象的服务存取。 在有些文献中把对象标识(OID)列为对象的另一要素。对象标识也就是对象的名字,有“外部标识”和“内部标识”之分。前者供对象的定义者或使用者用,后者为系统内部惟一的识别对象。(怎么感觉这点跟android开发里面的id是一样的,在某个文件下有编程人员定义的所有属性的id,并且是唯一的,一般不允许更改,属于系统内部分配。) 另外需要说明以下两点:第一点是,对象只描述客观事物本质的与系统目标有关的特征,而不考虑那些非本质的与系统目标无关的特征。这就是说,对象是对事物的抽象描述。第二点是,对象是属性和服务的结合体。二者是不可分的。而且对象的属性值只能由这个对象的服务来读取和修改,这就是后文将讲述的封装概念。 根据以上两点,也可以给出如下对象定义:对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用,它是一组属性和有权对这些属性进行操作的一组服务的封装体。 系统中的一个对象,在软件生命周期的各个阶段可能有不同的表示形式。例如,在分析与设计阶段是用某种OOD/OOA方法所提供的表示法给出比较粗略的定义,而在编程阶段则要用一种OOPL写出详细而确切的源程序代码。这就是说,系统中的对象要经历若干演化阶段,其表现形式各异,但在概念上是一致的,即都是问题域中某一事物的抽象表示。 1.2 类 把众多的事物归纳划分成一些类是人类在认识客观世界时经常采用的思维方法。分类所依据的原则是抽象,即:忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。例如:马、
亲属关系证明书 亲属关系证明 兹证明我会李(男,年月日出生,公民身份号码:,在深圳户口身份证号:)于年月日因病在深圳市死亡。李的配偶、父母、子女共有以下人: 父亲:,年月日出生,现住(或于某年某月某日去世)。 母亲:,年月日出生,现住(或于某年某月某日去世)。 妻子:,年月日出生,现住。 长子:,年月日出生,现住。 次子:,年月日出生,现住。 三子:,年月日出生,现住。 长女:,年月日出生,现住。 次女:,年月日出生,现住。 。。。。。。。。 。。。。。。。 特此证明 (派出所户籍加意见) 二o年月日 (村居印鉴) 应提供的材料及要求:
1、所有子女及配偶身份证、户口本,父母身份证、户口本(已故不需提供身份证但要证明内容) 2、死亡依据(如火化证、死亡证明、死亡医学证明等)、死亡户口注销; 3、财产依据(如社保卡、存折,应查实社保卡存款金额); 4、所有继承人应到公证处签名确认是否继承。 父亲去世了!很多事情需要公正处办理亲属关系证明书和继承公正书~!我的爷爷是我家的直系家属,一定要他到公正处作公正,但他现在行动不便,盲了和常年躺在床上~!这样有什么办法?怎样才能避免我爷爷去公正处? 1.如果你爷爷要这笔遗产,那就写一份授权书,到其所在地的公证处办理手续,委托代理人办理继承。 2.如果你爷爷不要这笔遗产,到其所在地的公证处办理放弃继承声明书公证,再拿到你所在地的公证处使用。 楼上说得简单但没错。你必须做亲属关系公证。亲属关系公证,需要到你或你亲属户口所在地的市级以上公证处办理。 1、公民,法人申请公证,应当向公证处提出,并填写公证申请表。公证申请表应填写下列内容:
java面向对象程序设计 系班级姓名成绩得分评卷人 一、填空题(每空2分,共20分) 1.Java源程序的扩展名是,经过编译后的程序的扩展名是。2.Socket通常也称为,用于描述和。3.线程的优先级在至之间,数值越大 4.构造方法是一种特殊的成员方法,构造方法名与相同 5.Java语言只允许单继承,指每个类只能有一个。 二、选择题(每题2分,共50分) 1.下列哪个概念是面向对象和面向过程程序设计所共有的() A、继承 B、流程控制 C、抽象 D、封装 2.以下关于执行Java小程序的论述错误的是:() A、可以通过浏览器调用嵌入了Java小程序的HTML文档 B、可以通过appletviewer.exe调用嵌入了Java小程序的HTML文档 C、可以通过java.exe调用嵌入了Java小程序的HTML文档 D、可以在Java集成开发环境中调用嵌入了Java小程序HTML文档 3.符合对象和类关系的是:() A、人和老虎 B、书和汽车 C、楼和土地 D、松树和植物 4.关于选择结构下列哪个说法正确?() A.if语句和else语句必须成对出现 B.if语句可以没有else语句对应 C.一个if语句只能有一个else if语句与之对应 D.else if结构中必须有default语句 5.while循环和do…while循环的区别是:()
A.没有区别,这两个结构任何情况下效果一样 B.while循环比do…while循环执行效率高 C.do…while循环执行次数可能为0 D.while循环执行次数可能为0 6.关于for循环和while循环的说法哪个正确?() A.while循环先判断后执行,for循环先执行后判断。 B.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果C.两种循环任何时候都不可以替换 D.两种循环结构中都必须有循环体,循环体不能为空 7.下列修饰符中与访问控制无关的是() A.private B.public C.protected D.final 8.方法内的形参:() A.必须定义多个形参B.可以没有 C.至少有一个D.只能是简单变量 9.throws的作用:() A.表示方法可能会抛出例外 B.表示后面是方法的输出量 C.方法的标志,每个方法都必须有 D.没有意义 10.在Java语言中,整型常量123占用的存储字节数是:()A.1B.2 C.4 D.8 11.关于对象成员占用内存的说法哪个正确?() A.同一个类的对象共用同一段内存 B、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间C.对象的方法不占用内存 D.以上都不对 12.return语句:()
面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 继承 面向对象编程(OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 继承的过程,就是从一般到特殊的过程。 要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。 在某些OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。 继承概念的实现方式有三类:实现继承、接口继承和可视继承。 实现继承是指使用基类的属性和方法而无需额外编码的能力; 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力; 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。 在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类
都可以继承Person 类。但是Leg 类却不能继承Person 类,因为腿并不是一个人。 抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字Interface 而不是Class。 OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。 多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。 实现多态,有二种方式,覆盖,重载。 覆盖,是指子类重新定义父类的虚函数的做法。 重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。 其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。” 那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 概念讲解 泛化(Generalization)
JA V A程序作业题 1、设计一个包含多个构造函数的类,并分别用这些构造函数实例化对象。 2、编写一个类Calculate1,实现加、减两种运算,然后,编写另一个派生类Calculate2,实现乘、除两种运算。 3、建立三个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据;官员则继承自成人,多包含党派、职务两项数据。要求每个类的字段都以属性的方式对外提供数据输入输出的功能。 4、编写一个类,其中包含一个排序的方法sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。 5. 编写一个控制台应用程序,定义一个类MyClass,类中包含有public、private以及protected数据成员及方法。然后定义一个从MyClass类继承的类MyMain,将Main方法放在MyMain中,在Main方法中创建MyClass类的一个对象,并分别访问类中的数据成员及方法。要求注明在试图访问所有类成员时哪些语句会产生编译错误。 7.创建一个类包含有protected数据。在相同的文件里创建第二个类,用一个方法操纵第一个类里的protected数据 9 编写一个控制台应用程序,完成下列功能,并回答提出的问题。 1) 创建一个类A,在构造函数中输出“A”,再创建一个类B,在构造函数中输出“B”。 2) 从A继承一个名为C的新类,并在C内创建一个成员变量B。不要为C创建构造函数。 3) 在Main方法中创建类C的一个对象,写出运行程序后输出的结果。 4) 如果在C中也创建一个构造函数输出“C”,整个程序运行的结果又是什么? 10 编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。 1) 创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值加10后的结果。 2) 再创建一个类B,使其继承自类A,然后重写A中的MyMethod方法,将A中接收的整型值加50,并输出结果。 3) 在Main方法中分别创建类A和类B的对象,并分别调用MyMethod方法。 11. 创建一个类,它存储一个int数据成员MyNumber,并给该数据成员创建属性,当该数据成员被存储时,将其乘以100;当其被读取时,将其除以100。 12. 定义一个车辆(Vehicle)基类,具有Run、Stop等方法,具有Speed(速度)、MaxSpeed (最大速度)、Weight(重量)等字段。然后以该类为基类,派生出bicycle、car等类。并编
《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案2 一、单选择题(每小题2分,共10分) 1、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B )。 A. .java B. .class C. .html D. .exe 2、设x = 1 , y = 2 , z = 3,则表达式y+=z--/++x 的值是( A )。 A. 3 B. 3. 5 C. 4 D. 5 3、在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的( D )方法来完成一些画图操作。 A. start( ) B. stop( ) C. init( ) D. paint( ) 4、不允许作为类及类成员的访问控制符的是( C )。 A. public B. private C. static D. protected 5、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。 A. static void method( ) B. public void method( ) C. final void method( ) D. abstract void method( ) 二、填空题(每空格1分,共20分) 1、开发与运行Java程序需要经过的三个主要步骤为编辑源程序、编译生成字节码、和解释运行字节码。 2、如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是Applet、类的子类并且存储该源程序文件的文件名为MyApplet。 3、如果一个Java Applet程序文件中定义有3个类,则使用Sun公司的JDK编译器javac.exe编译该源程序文件将产生3 个文件名与类名相同而扩展名为. class的字节码文件。
内蒙古科技大学面向对象的程序设计实验8-继承(一)
内蒙古科技大学 面向对象的程序设计 实验报告 课程名称:面向对象的程序设计姓名:陈伟光 实验名称:继承(一)学号:1567159118任课教师:刘月峰专业:软件工程 指导教师:刘月峰班级:15-软件一班 一、实验目的 1.理解继承的含义以及声明; 2.理解共有派生、私有派生和保护派生的含义以及使用; 3.理解单派生类中构造函数和析构函数的调用顺序。 二、实验环境 编译器:Visual C++ 6.0. 操作系统:Windows 7 旗舰版 三、实验内容 2.1练习(一): 1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include "iostream.h" class CBase { public: CBase(int a) :a(a) {