Java基础第8天练习题
练习1
一、需求说明:定义子父类,父类如果被final修饰,测试子类能否继承父类。
二、再定义普通的子父类,父类中有方法被final所修饰,测试子类能否重写该方法。
三、定义一个类,该类中有final修饰的变量,并对其进行初始化,在该类中定义一个普通方法,测试这个变量值能否修改。
1.2.操作步骤描述
1.创建Father类,该类被final修饰。
2.创建Son类,并继承Father类,查看编译结果。
3.将上述内容注释掉,接下来,定义普通的子父类关系。
4.在父类中定义被final所修饰的method方法,方法中打印内容为method father
5.子类中重写父类中method方法,打印内容为method son,查看编译结果。
6.在该子类中定义一个成员变量age,初始化值为10,对该成员变量用final所修饰。
7.在该子类中定义show方法,在方法中,将age值改为20,并打印age值。
package com.scy.day8;
public final class Father {
}
package com.scy.day8;
public class son extends Father {
}
结果:Error:(3, 26) java: 无法从最终com.scy.day8.Father进行继承
package com.scy08;
public class Father {
public Father(){
}
public final void method(){
System.out.println("method father");
}
}
package com.scy08;
public class Son extends Father {
public Son (){
}
@Override
public final void method(){
System.out.println("method son");
}
}
java: com.scy08.Son中的method()无法覆盖
com.scy08.Father中的method()
被覆盖的方法为final
package com.scy08;
public class Son extends Father {
public final int age =10;
public Son (){
}
@Override
public void method(){
System.out.println("method son");
}
public void show(){
this.age = 20;
System.out.println(age);
}
}
package com.scy08;
public class Test {
public static void main(String[] args) {
Son s = new Son();
s.show();
}
}
Error:(14, 13) java: 无法为最终变量age分配值
练习2
一、需求说明:定义学生类,学生类有三个属性:name、age、graduateFrom(此属性用static修饰),该类中有成员show方法,方法中打印三个成员变量的值。
二、在测试类中创建该学生对象,为对象中的成员变量赋值,并调用show方法。
三、在测试类中再次创建学生对象,为对象中的成员变量赋值,并调用show方法。
四、发现问题,每次创建学生对象都需要给学生的毕业院校属性进行赋值,那么当学生的毕业院校都属于同一所学校时,这样每次创建对象都需要重新赋值很不方便,故而,将该属性graduateFrom新增static所修饰,让这个成员变量被所有对象所共享。
2.2.操作步骤描述
1.定义学生类,学生类有三个属性:name、age、graduateFrom,该类中有成员show方法,方法中打印三个成员变量的值
2.在测试类中创建该学生对象,为对象中的成员变量赋值,并调用show方法。
3.在测试类中再次创建学生对象,为对象中的成员变量赋值,并调用show方法。
4.发现问题,每次创建学生对象都需要给学生的毕业院校属性进行赋值,那么当学生的毕业院校都属于同一所学校时,这样每次创建对象都需要重新赋值很不方便,故而,将该属性graduateFrom新增static所修饰,让这个成员变量被所有对象所共享。
5.在测试类中创建两次学生对象,第一次创建学生对象时,给对象中的属性赋值,并调用show方法,第二次创建学生对象时,只给对象中的name、age属性赋值,调用show方法。
6.发现第二个学生对象调用show方法时,打印的学生信息中发现,该学生的毕业院校和第一个学生对象一致,从而证明被static所修饰的成员被该类的所有对象所共享。
7.在第一次创建学生对象时,给该学生的静态变量graduateFrom赋值时,发现有黄色警告,说明该成员如果被静态所修饰,应该用类名直接调用,故而在创建对象之前先用类名调用成员
package com.scy08;
public class Student {
public String name;
public int age;
public static String graduateFrom;
public void show(){
System.out.println(name+age+graduateFrom);
}
}
package com.scy08;
public class Test {
public static void main(String[] args) {
Student.graduateFrom = "南京大学";
Student s = new Student();
s.name = "wang";
s.age = 52;
s.show();
System.out.println("----------------");
Student.graduateFrom = "北京大学";
Student s1 = new Student();
s1.name = "li";
s1.age = 30;
s1.show();
}
}
结果:
wang52南京大学
----------------
li30北京大学
练习3
3.1.训练描述:【static方法的访问特点】
一、需求说明:定义学生类,类中有静态成员变量和非静态成员变量,有两个非静态成员方法show()、show2()和两个静态成员方法show3()、show4()
二、在学生类中演示静态方法能否访问静态成员及非静态成员,在非静态方法能否访问非静态成员及静态成员,并在静态中演示能否与this、super连用。
3.2.操作步骤描述
1.定义学生类,学生类有静态属性age,初始值为30。非静态属性name,初始值为林青霞
2.在该类中定义非静态方法show()、show2(),再定义静态方法show3()、show4()
3.在show2()方法与show4()方法中,方法体不需要写内容。
4.在非静态方法show()中打印name和age值,调用show2()、show4()方法,并用this调用成员变量为其赋值。
5.在静态方法show3()中打印name和age值,调用show2()、show4()方法,并用this调用成员变量为其赋值
package com.scy08;
public class Student {
public String name="林青霞";
public static int age=30;
public void show1(){
System.out.println(name+age);
show2();
show4();
this.name = "王力宏";
this.age = 10;
System.out.println(name+age);
}
public void show2(){
}
public static void show3(){
System.out.println(name+age);
show2();
show4