第六章 面向对象(下)

1. 不上机,判断下面程序的输出结果

class X {
     Y b = new Y();
     X() {
           System.out.print("X");
     }
}
class Y {
     Y() {
           System.out.print("Y");
     }
}
public class Z extends X {
     Y y = new Y();
     Z() {
           System.out.print("Z");
     }
     public static void main(String[] args) {
       new Z();
     }
}                

结果:YXYZ

分析:首先运行主函数,进入Z类。由于Z为X的继承类,所以先访问X类,X中包含一个Y类对象,输出Y后输出X。Z类中也有一个Y类对象,输出Y,最后输出Z类中的Z。

 

2.什么是数据隐藏?如何证明子类对父类同名方法进行重新定义,只能是方法的覆盖而不是方法的隐藏?

答:(1)数据隐藏就是封装,就是将属性私有化,提供公有的方法去访问私有属性。 为属性创建getter()和setter()方法分别为:读取属性值和为属性赋值。同时在setter()方法里为属性赋值可以做一些数据的处理,增强数据的可维护性。

     (2)当定义了子类同名后在子类和父类中均设置输出函数,若是调用父类时可以输出原父类输出函数,则说明是影藏,否则就是被子类覆盖了。

 

3.A1、A2分别是具体类A的子类,A3为A1的子类,A1、A2之间关系为平行类,下面的代码为连续程序片段,请问哪些正确

A a = new A();      对

a = new A1();       对(A1为A的子类)

a = new A2();       对(A2位A子类 且 A2与A1为平行类)

a = new A3();       对(A3为A2的子类)

A1 a1 = new A3();        对(A3为A2的子类 且 A2与A1为平行类)

A3 a3 = a1;        错

A2 a2 = new A1();      错

a3 = new A2();        错

 

4.借助JDK帮助,编写程序实现这样的功能:Applet当中的TextField,每输入任一字符,在一个label当中都能动态跟踪刷新。

import java.applet.Applet;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class F extends Applet implements KeyListener{
 TextField f=new TextField(10);
 Label l=new Label("                    ");
 public void init(){
  f.addKeyListener(this);
  add(f);
  add(l);
  setSize(500,100);
 }
 public void keyPressed(KeyEvent arg0) {
 }
 public void keyReleased(KeyEvent arg0) {
 }
 public void keyTyped(KeyEvent ke) {
  l.setText(f.getText()+ke.getKeyChar());
 }
}

 

posted on 2015-12-04 14:58  hzau2013310200722  阅读(277)  评论(0编辑  收藏  举报

导航