封装和继承作业
<p align="center">封装和继承作业 一、??? 选择题 ? |
<tr>
<td valign="top" width="53">
<p align="left">3.
</td>
<td colspan="2" valign="top" width="661">
<p align="left">以下关于继承条件下构造方法执行过程的代码的执行结果是( ?A? )。(选择一项)
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td colspan="2" valign="top" width="661">
<p align="left">class Person {???????
<p align="left">???????? public Person() {
<p align="left">????????????????? System.out.println("execute Person()");
<p align="left">???????? }
<p align="left">}
<p align="left">class Student extends Person {?
<p align="left">???????? public Student() {????????
<p align="left">????????????????? System.out.println("execute Student() ");
<p align="left">???????? }??????
<p align="left">}
<p align="left">class PostGraduate extends Student {??????
<p align="left">???????? public PostGraduate() {??????
<p align="left">????????????????? System.out.println("execute PostGraduate()");
<p align="left">???????? }??????
<p align="left">}
<p align="left">public class TestInherit {
<p align="left">???????? public static void main(String[] args) {
<p align="left">????????????????? new PostGraduate();????????????
<p align="left">???????? }
<p align="left">}
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="607">
<p align="left">?
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">A.
</td>
<td valign="top" width="607">
<p align="left">execute Person()
<p align="left">execute Student()
<p align="left">execute PostGraduate()
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">B.
</td>
<td valign="top" width="607">
<p align="left">execute PostGraduate()
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">C.
</td>
<td valign="top" width="607">
<p align="left">execute PostGraduate()
<p align="left">execute Student()
<p align="left">execute Person()
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">D.
</td>
<td valign="top" width="607">
<p align="left">没有结果输出
</td>
</tr> <table style="width: 714px" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" width="53">
<p align="left">4.
</td>
<td colspan="2" valign="top" width="661">
<p align="left">以下关于this和super关键字的说法错误的是(??? BD)。(选择二项)
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="607">
<p align="left">?
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">A.
</td>
<td valign="top" width="607">
<p align="left">this关键字指向当前对象自身,super关键字指向当前对象的直接父类
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">B.
</td>
<td valign="top" width="607">
<p align="left">在main方法中可以存在this或super关键字,但不能同时存在。
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">C.
</td>
<td valign="top" width="607">
<p align="left">this和super关键字都可以访问成员属性,成员方法和构造方法
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="53">
<p align="left">D.
</td>
<td valign="top" width="607">
<p align="left">在一个类的构造方法中可以同时使用this和super来调用其他构造方法
</td>
</tr> <table style="width: 714px" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" width="53">
<p align="left">5.
</td>
<td colspan="2" valign="top" width="661">
<p align="left">给出下面的代码段,在代码说明//assignment x=a,y=b处写入如下( D?? )个代码是正确的。(选择一项)
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td colspan="2" valign="top" width="661">
<p align="left">public class Base {
<p align="left">???????? int w,x,y,z;
<p align="left">???????? public Base(int a,int b) {
<p align="left">????????????????? x = a;
<p align="left">????????????????? y = b;
<p align="left">???????? }
<p align="left">???????? public Base(int a,int b,int c,int d) {
<p align="left">????????????????? // assignment x=a,y=b
<p align="left">????????????????? w = d;
<p align="left">????????????????? z = c;
<p align="left">???????? }
<p align="left">}
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">?
</td>
<td valign="top" width="611">
<p align="left">?
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">A
</td>
<td valign="top" width="611">
Base(a,b);
B. C. this(a),this(b); D. this(a,b) <table style="width: 714px" border="0" cellspacing="0" cellpadding="0"><tr>
<td valign="top" width="53">
<p align="left">6.
</td>
<td colspan="4" valign="top" width="661">
<p align="left">以下Java程序编译运行后的输出结果是(A? )。(选择一项)
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td colspan="4" valign="top" width="661">
<p align="left">class HelloA {
<p align="left">???????? public HelloA( ) {
<p align="left">????????????????? System.out.println("HelloA");
<p align="left">???????? }
<p align="left">???????? {?? System.out.println("I'm A class");
<p align="left">???????? }
<p align="left">?
<p align="left">???????? static {
<p align="left">????????????????? System.out.println("static A");
<p align="left">???????? }
<p align="left">}
<p align="left">public class HelloB extends HelloA {
<p align="left">???????? public HelloB( ) {
<p align="left">????????????????? System.out.println("HelloB");
<p align="left">???????? }
<p align="left">???????? {?? System.out.println("I'm B class");
<p align="left">???????? }
<p align="left">???????? static {
<p align="left">????????????????? System.out.println("static B");
<p align="left">???????? }
<p align="left">???????? public static void main(String[] args) {
<p align="left">????????????????? new HelloB( );
<p align="left">???????? }
<p align="left">}
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">?
</td>
<td colspan="3" valign="top" width="611">
<p align="left">?
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">A
</td>
<td valign="top" width="319">
static A
static B
I'm A class
HelloA
I'm B class
HelloB
C. static AI'm A class
HelloA
static B
I'm B class
HelloB
B. static Astatic B
I'm A class
I'm B class
HelloA
HelloB
D static Astatic B
HelloA
HelloB
I'm A class
I'm B class
<table style="width: 717px" border="0" cellspacing="0" cellpadding="0"><tr>
<td valign="top" width="56">
<p align="left">7.
</td>
<td colspan="2" valign="top" width="661">
<p align="left">下列选项中关于Java中super关键字的说法正确的是(?? AD? )。(选择二项)
</td>
</tr>
<tr>
<td valign="top" width="56">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">?
</td>
<td valign="top" width="611">
<p align="left">?
</td>
</tr>
<tr>
<td valign="top" width="56">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">A
</td>
<td valign="top" width="611">
<p align="left">super关键字是在子类对象内部指代其父类对象的引用
</td>
</tr>
<tr>
<td valign="top" width="56">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">B.
</td>
<td valign="top" width="611">
<p align="left">super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
</td>
</tr>
<tr>
<td valign="top" width="56">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">C.
</td>
<td valign="top" width="611">
<p align="left">子类通过super关键字只能调用父类的方法,而不能调用父类的属性
</td>
</tr>
<tr>
<td valign="top" width="56">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">D.
</td>
<td valign="top" width="611">
<p align="left">子类通过super关键字可以调用父类的构造方法
</td>
</tr> 二、??? 判断题
- 使用public修饰的成员属性和方法可以被当前项目中所有包的所有类访问。( T? )
- 类的方法通常设为public,而类的实例变量一般也设为public。(F??? )
- 与未加访问控制符的缺省情况相比,public和protected修饰符扩大了类及其属性和方法的被访问范围,private修饰符则缩小了这种范围。( T )
- 访问权限是private的变量,只能在本类和与本类同一个包中的其他类使用。(?? F )
- 如果定义一个类时没有使用extends,则它的父类是java.lang.Object。( T?? )
- 对子类实例化对象需要调用超类的构造函数进行初始化工作,完成对子类中的超类实例变量的初始化,则子类可以继承超类的构造函数。(F )
- 在Java中任何一个子类的构造方法都必须调用其父类的构造方法(包括隐式调用),并且调用父类的构造方法的语句必须是子类构造方法的第一条语句。(?? F)
- Java中的类不允许多重继承,一个类只能有有一个直接父类。(T)
- Object类有一个public方法是toString( ),一个对象通过调用该方法可以获得该对象的字符串表示。(? T? )
- 运算符“==”用于比较引用时,如果两个引用指向内存同一个对象,则返回true。(? T? )
三、??? 简答题
- private、默认、protected、public四个权限修饰符的作用.
访问修饰符:可以修饰变量,方法,类
??? ??????? 修饰变量:四种修饰符都能使用
??? ??????? 修饰方法:四种修饰符都能使用
??? ??????? 修饰类:2种? public,default
- 方法重载和方法重写(覆盖)的区别。.
(1)方法重载:存在一个类中
?????????????????????? 方法名必须相同
?????????????????????? 参数列表不同(参数个数,类型,顺序不同)
?????????????????????? 与返回值无关
???????? (2)方法重写:存在子父类中,子类把父类的方法重写一遍
??????????????????????? 返回值,方法名,参数列表必须一致
??????????????????????? 子类的访问修饰符要大于等于父类的访问修饰符?
- java.lang.Object类的六个常用方法的声明并说明其作用。
Object类有一个默认构造方法pubilcObject(),在构造子类实例时,都会先调用这个默认构造方法。????
equals()方法:用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是否指向同一块内存区域。
toString():返回该对象的字符串表示。Object类中的toString()方法会打印出类名和对象的内存位置。几乎每个类都会覆盖该方法,以便打印对该对象当前状态的表示。
f inalize
protected void finalize()
???????????????? throws Throwable
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写?finalize?方法,以配置系统资源或执行其他清除。
wait
public final void wait()
??????????????? throws InterruptedException
导致当前的线程等待,直到其他线程调用此对象的?notify()?方法或?notifyAll()?方法。换句话说,此方法的行为就好像它仅执行?wait(0)?调用一样。
notify
public final void notify()
唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个?wait?方法,在对象的监视器上等待。
- 继承条件下子类构造方法的执行过程
???? ? 1、子类的构造过程中必须调用其基类的构造方法。
2、子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法
? ? ? 2.1、使用this(argument_list)调用本类的另外构造方法。
?? ??2.2、如果调用super,必须写在子类构造方法的第一行。
3、如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法。
4、如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错。
- super关键字的作用和使用
? super子类可以通过它调用父类的方法????? 写在构造方法的第一行
- ==和equals()的联系和区别
1.基本数据类型
也称原始数据类型。byte,short,char,int,long,float,double,boolean?他们之间的比较,应用双等号(==),比较的是他们的值。?
2.复合数据类型(类)?
? 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
? 对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
四、??? 编码题
- 以面向对象的思想,编写自定义类描述IT从业者。设定属性包括:姓名,年龄,技术方向,工作年限,工作单位和职务;方法包括:工作
要求:
1)?????? ?设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
2)?????? ?限定IT从业人员必须年满15岁,无效信息需提示,并设置默认年龄为15。
3)?????? ?限定“技术方向”是只读属性
4)?????? ?工作方法通过输入参数,接收工作单位和职务,输出个人工作信息
5)?????? ?编写测试类,测试IT从业者类的对象及相关方法(测试数据信息自定义)