Java面向对象程序设计(第四五章习题答案简述)

第四章 面向对象(上)

1.名词解释
构造方法:

构造方法是一个与类名相同的类方法。每当使用new关键字创建一个对象,为新建对象开辟了内存空间之后,Java系统将自动调用构造方法初始化这个对象。构造方法属于类,而不属于对象。

抽象:

抽象是从被研究对象中舍弃个别的、非本质的或与研究主旨无关的次要特征,而抽取与研究有关的共性内容加以考察,形成对研究问题正确、简明扼要的认识。

2.对象位于内存何处?声明能引用对象的实质是?

1.堆内存中。
2.从栈空间中初始化一个引用,保存对象的地址。

3.对象和基本数据类型作为参数传递时,有什么不同?

基本数据类型作为参数在方法中的传递是值传递,对象是引用传递,当对象作为参数传递时,传递的是对象的地址。

4.在自定义对象中写finalize方法,看看什么情况下finalize被调用:
package 调试;
public class Test {
   private int a;
   public Test(int b) {
         a = b;
   }
   public void finalize() {
         System.out.println("finalize方法被调用");
   }
   public static void main(String[] args) {
         Test test = new Test(666);//test初始对象
         System.out.println(test.a);     
          test = new Test(14);//test指向了别的对象,原先的test变成了垃圾
          System.gc();//调用系统函数,回收垃圾
    }
}

结果:
666
finalize方法被调用

5.对象在什么条件下成为垃圾?什么情况下释放垃圾对象,如何证明一个对象被释放了?

对象在没有任何引用时成为垃圾。

系统在内存不足时会释放垃圾,或者调用System.gc()函数释放。

6.final修饰符都有什么作用?

①修饰类属性,则该属性为常量

②修饰的方法为最终方法,在子类中不能被覆盖

7.static修饰的属性和方法有什么特点:

static修饰属性或方法后,属性和方法不在属于某个特定的对象,而是所有共享,也可以说是static成员不依赖某个对象,在类加载时就被初始化,且只执行一次初始化。static修饰的属性或方法,可以直接使用类名调用,而不用先实例化对象再调用。

8.Application程序执行时,为什么不能带后缀名?

java命令是执行一个类。

若写 java x.y是代表要运行 package x 中的class y 里面的 main(String[]),所以当你写 java x.class 时, 它会以为要找一个叫x的package里面的一个叫class的class。

9.ADE(声明不分配内存空间的,创建对象时才分配对应的内存空间)

第五章 面向对象(中)

1.面向对象的主要特征是什么:

①封装:是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。

②继承:是子对象可以继承父对象的属性和行为,即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为。

③多态性:是指允许不同类的对象对同一消息作出响应。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

2.封装是如何实现的:

①修改属性的可见性,限制访问。

②设置属性的读取方法。

③在读取属性的方法中,添加对属性读取的限制。

3.对象之间如何相互作用?作用的条件是什么?

通过封装与组合来设计,具有“高内聚,低耦合”的特点。封装是利用访问控制符来实现的,而组合则通过对象内部的属性引用来实现。

4.protected修饰符有何特点:

访问权限为包内,类内和子类。

在父类中定义的方法和成员变量如果为protected修饰的,同包中任意访问,以及只有父类声明为public时不同包的子类可以访问。

5.Object都有哪些方法:

在这里插入图片描述

6.重载的方法之间一般有什么关系?

两个方法的方法名一样,返回值不确定,参数的个数或者类型不一样。可以说重载的方法是一个方法的两种实现。

7.子类覆盖父类方法需要什么条件?子类中定义与父类同名的方法一定是覆盖吗?

①父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用super关键字来访问父类中的被重写的方法), 如果父类中的方法为private类型的,那么子类则无法继承,也无法覆盖。

②子类和父类的方法必须是实例方法,如果父类是static方法而子类不是实例方法,或者相反都会报错。

如果父类和子类都是static方法,那么子类重写或者覆盖父类方法。

8.封装、继承与多态在面向对象程序设计中的用途是什么?

封装使得内部实现对用户隐藏,有利于安全操作;继承可以实现对象之间的共性与特性;多态性更贴近人的使用习惯,使程序更方便。

9.设计Src和Dis两个类,Src中有一个被封装的属性,类型为int(要求为非负值),每当通过特定方法更改Src对象中的这个属性后,Dis对象都能得到通知,并向Src发消息获得此属性值。
package 调试;
class Src{
  int s;
  public Src(int _s){//构造函数,保证s的非负
      if(_s>=0) {   s = _s;  }    
      else {  s=0;  }
  }
  public void change(Dis d){//设计一个特殊的方法来改变s的值,每次改变都会给Dis对象发通知
      for(int a=1;a<6;a++) {
           d.get();
           s=s+a;
       }
  }   
}
class Dis {   
  Src src;
  public Dis(Src s) {
      src = s; //this.scr=s;  Dis对象中拥有了Src对象的引用   
  }
  public void get() { //用来接收通知     
      Print();   //this.Print();
  }   
  public void Print(){
      System.out.print(src.s+" ");  //Dis中对象发送消息给Src的对象   
  } 
}
//main函数
public class  Run{
  public static void main(String[] args) {  
      Src src = new Src(1); //产生Src对象
      Dis dis = new Dis(src);  //产生Dis对象,并将Src对象引用作为参数传入
      dis.src.change(dis);//发送消息,产生调用关系
   }
}

结果:1 2 4 7 11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值