第4章 类与对象2
- 格式:doc
- 大小:466.50 KB
- 文档页数:19
3.2 类与对象的概念及定义本章目标掌握类与对象的概念掌握类的定义掌握对象的创建1.类与对象的概念在面向对象中,类和对象是最基本、最重要的组成单元。
类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
例如,在现实生活中,人就可以表示为一个类,因为人本身属于一种广义的概念,并不是一个具体的。
而某一个具体的人,就可以称为对象,可以通过各种信息完整地描述这个具体的人,如这个人的姓名、年龄、性别等信息,这些信息在面向对象的概念中就称为属性;当然人是可以吃饭、睡觉的,这些人的行为在类中就称为方法。
也就是说如果要使用一个类,就一定要产生对象,每个对象之间是靠各个属性的不同来区分的,而每个对象所具备的操作就是类中规定好的方法。
类与对象的关系如下图所示。
提示:类与对象的另一种解释。
关于类与对象,初学者在理解上是存在一定难度的,下面给大家作一个简单的比喻。
大家都应该知道,如果想要生产出汽车,则首先一定要设计出一个汽车的设计图纸(如下图所示),然后按照些图纸规定的结构生产汽车。
这样生产出的汽车结构和功能都是一样的,但是每辆车的具体内容,如各个汽车颜色、是否有天窗等都会存在一些差异。
在这个实例中,汽车设计图纸实际上就是规定出了汽车应该有的基本组成,包括外型、内部结构、发动机等信息的定义,那么这个图纸就可以称为一个类,显然只有图纸是无法使用的,而通过这个模型生产出的一辆辆的具体汽车是可以被用户使用的,所以就可以称其为对象。
2.类的定义从类的概念中可以了解,类是由属性和方法组成的。
属性中定义类一个个的具体信息,实际上一个属性就是一个变量,而方法是一些操作的行为,但是在Java 程序设计中,定义类也是按照具体的语法要求完成的,类的定义语法如下: 【格式1 类的定义】class 类名称{ 数据类型 属性; …public 返回值的数据类型 方法名称(参数类型 参数1, 参数类型 参数2, …){ 程序语句; [return 表达式;] }}提示:属性也可以称为变量。
一、选择题1定义类头时,不可能用到的关键字是()。
A) class B)private C)extends D)public2.下列类定义中,不正确的是()。
A) class x { .... }B) class x extends y { .... }C) static class x implements y1,y2 { .... }D) public class x extends Applet { .... }3.下列类头定义中,错误的是()。
A)public x extends y {...}B) public class x extends y {...}C)class x extends y implements y1 {...}D)class x {...}4.设A为已定义的类名,下列声明A类的对象a的语句中正确的是( )。
A) float A a; B) public A a=A( );C) A a=new int( ); D) static A a=new A( );5.设A为已定义的类名,下列声明A类的对象a的语句中正确的是()。
A) public A a=new A( ); B) public A a=A( );C) A a=new class( ); D) a A;6.设X 、Y均为已定义的类名,下列声明类X的对象x1的语句中正确的是()。
A) public X x1= new Y( ); B) X x1= X ( );C) X x1=new X( ); D) int X x1;7.设X 、Y为已定义的类名,下列声明X类的对象x1的语句中正确的是()。
A) static X x1; B) public X x1=new X(int 123);C) Y x1; D) X x1= X( );8.通过类MyClass中的不含参数的构造方法,生成该类的一个对象obj,可通过以下语句实现:_______________________________。
9. 设i , j为类X中定义的int型变量名,下列X类的构造方法中不正确的是( )。
A) void X(int k ){ i=k; } B) X(int k ){ i=k; }C) X(int m, int n ){ i=m; j=n; } D) X( ){i=0;j=0; }10. 有一个类A,以下为其构造方法的声明,其中正确的是( )。
A)public A(int x){...} B)static A(int x){...}C)public a(int x){...} D)void A(int x){...}11.有一个类A,以下为其构造方法的声明,其中正确的是( )。
A)void A(int x){...} B)A(int x){...}C)a(int x){...} D)void a(int x){...}12.设i、j、k为类X中定义的int型变量名,下列类X的构造方法中不正确的是( )。
A) X( int m){ ... } B) void X( int m){ ... }C) X( int m, int n){ ... } D) X( int h,int m,int n){ ... }13. 设i , j为类X中定义的double型变量名,下列X类的构造方法中不正确的是( )。
A) double X(double k ){ i=k; return i; } C) X( ){i=6;j=8; }B) X(double m, double n ){ i=m; j=n; } D) X(double k ){ i=k; }二、填空题1.下面是一个类的定义,请完成程序填空。
public class ____________{int x, y;Myclass ( int i, _______) // 构造方法{x=i; y=j;}}14. 下面是一个类的定义,请将其补充完整。
class _____{String name;int age;Student( _____ s, int i){name=s;age=i;}}2.下面是一个类的定义,请将其补充完整。
class ____________ // 定义名为myclass的类{__________ int var=666;static int getvar(){ return var; }}3.下面程序的功能是通过调用方法max()求给定的三个数的最大值,请将其补充完整。
public class Class1{public static void main( String args[] ){int i1=1234,i2=456,i3=-987;int MaxValue;MaxValue=____________;System.out.println("三个数的最大值:"+MaxValue);}public ______ int max(int x,int y,int z){ int temp1,max_value;temp1=x>y?x:y;max_value=temp1>z?temp1:z;return max_value;}}4.下面是一个类的定义,请将其补充完整。
___________ A{ String s;_____ int a=666;A(String s1) { s=s1; }static int geta( ) { return a; }}三、程序阅读题1.下面是一个类的定义,根据题目要求回答以下问题.class B{private int x;private char y;public B(int i,char j){x=i; y=j;}public void show(){System.out.println("x="+x+"; y="+y);}public void methodC(int x){this.x=this.x+x;y++;show();}}(1)定义类B的一个对象b,将类中的变量x初始化为10、变量y初始化为’A’,请写出相应的语句。
(2)若在(1)问基础上有方法调用语句:b.show();则输出如何?(3)若在(1)问基础上增加语句: b.methodC(1); 则输出为何?2.阅读程序,回答问题。
public class Test52{static String str1="Hello, Java world! \t";static String str2="Hello, students! ";public static void main(String args[]){ System.out.print(str1); System.out.println(str2); } }问题:1)这是哪种形式的java 程序?2)程序的输出是什么?3. 写出下列程序的输出结果public class Test{public static void main(String[] args){Count myCount = new Count();int times = 0;for(int i=0;i<100;i++)increment(myCount , times);System.out.println(“count is” + myCount.count);System.out.println(“time is”+ times);}public static void increment(Count c , int times){c.count++;times++;}}class Count{public int count;Count(int c){count =c;}Count(){count =1;}}4.写出下列程序的输出结果:public class Test{public static void main(String[] args){Cirecle circle1 = new Circle(1);Cirecle circle2 = new Circle(2);// Attempt to swap circle 1 with circle2System.out.println(“Before swap:circle1 = ”+circle1.radius+”circle2 = ”+circle2.radius);swap(circle1,circle2);System.out.println(“After swap: circle1 = ”+circle1.radius+”circle2 = ”+circle2.radius);}public static void swap(Circle x , Circle y){System.out.println(“Before swap: x = ”+x.radius+”y = ”+y.r adius);Circle temp = x;x = y;y = temp;System.out.println(“Before swap: x = ”+x.radius+”y = ”+y.radius);}}答案:5.阅读下面程序,回答问题:public class Foo{int i;static String s;void imethod(){}static void smethod(){}}设f是Foo的一个实例,下列语句正确吗?System.out.println(f.i);System.out.println(f.s);f.imethod();f.smethod();System.out.println(Foo.i);System.out.println(Foo.s);Foo.imethod();Foo.smethod();6.下列程序的输出结果是什么?public class Foo{static int i=0;static int j=0;public static void main(String[] args){int i=2;int k=3;{int j=3;System.out.println(“i + j is ”+ i + j);}k = i +j;System.out.println(“k is ”+k);System.out.println(“j is ”+ j);}}答案:7. 根据下面的程序,指出下面每个元素的作用域(类作用域或块作用域)a)变量xb)变量yc)方法cuded)变量ie)变量yPospublic class CubeTest{int x;public void print(){int yPos = 10;for(x=1;x<=10;x++){System.out.println(cude(x));for(int i=1;i<=yPos;i++)System.out.println(" ");}}public int cude (int y){return y*y*y;}}答案:四、简答题1. 面向对象的软件开发方法用什么把数据和基于数据的操作封装在一起?(2. 在一个类定义中,用什么描述对象的状态? 用什么描述对象的行为?3. 什么方法是一个特殊的方法,用于对对象进行初始化?4.一个源程序文件中,能有多于一个的public 类吗?5. 构造方法的方法名可由编程人员任意命名吗?6.类的构造方法名必须和类名相同吗?7.构造函数有返回值吗?8. 构造函数可以重载吗?9. 如果一个类定义中没有定义构造方法,该类有构造函数吗?10. 如果一个类定义中已经定义了构造方法,java还会给它定义缺省的构造方法吗?11. 类的访问控制权有哪两种?12. 用什么修饰符修饰的方法称为静态方法? 用什么修饰符修饰的属性称为静态属性?13.静态属性和静态方法仅属于类的一个具体对象吗?它属于谁?14. static 变量能是private 变量吗?15. 使用静态成员都能以什么做前缀?16. static方法中能有this引用吗?17. 非static方法中可以有this引用吗?18.static方法能处理非static成员吗?19.非static方法能处理static成员吗?五、编程题1、//基本类定义编写一个类,描述学生的学号、姓名、成绩。