Java内部类练习题
1.定义一个Father和Child类,并进行测试。
要求如下:
- Father类为外部类,类中定义一个私有的String类型的属性name,name的值为“zhangjun”。
- Child类为Father类的内部类,其中定义一个introFather()方法,方法中调用Father类的name属性。
- 定义一个测试类Test,在Test类的main()方法中,创建Child对象,并调用introFather ()方法。
2.简述下列程序运行结果:
public class Test {
public static void main (String[] args)
{
A.Inner inner = new A().new Inner();
inner.show();
}
}
class A
{
int y = 6;
class Inner
{
static int y = 3;
void show()
{
System.out.print(y);
}
}
}
/**
* 运行结果:
* 运行出错:
* 成员内部类中不能拥有静态变量,但可以访问外部静态域
*/
3.写出下面程序运行结果:
public class Test {
public static void main (String[] args)
{
B b = new B();
}
}
class A
{
public A()
{
System.out.println ("A");
}
}
class B extends A
{
public B()
{
System.out.println ("B");
}
}
运行结果:
原因:类之间有继承关系时,要调用子类的构造方法,先调用父类的构造方法
4、打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
运行结果:
5.定义一个抽象的"Role"类,有姓名,年龄,性别等成员变量
1)要求尽可能隐藏所有变量(能够私有就私有,能够保护就不要公有),
再通过GetXXX()和SetXXX()方法对各变量进行读写。具有一个抽象的play()方法,
该方法不返回任何值,同时至少定义两个构造方法。Role类中要体现出this的几种用法。
2)从Role类派生出一个"Employee"类,该类具有Role类的所有成员(构造方法除外),
并扩展salary成员变量,同时增加一个静态成员变量“职工编号(ID)”。
同样要有至少两个构造方法,要体现出this和super的几种用法,还要求覆盖play()方法,
并提供一个final sing()方法。
3)“Manager"类继承"Employee"类,有一个final成员变量"vehicle”
在main()方法中制造Manager和Employee对象,并测试这些对象的方法。
abstract class Role
{
private String name;
private int age;
private String sex;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
public Role()
{
System.out.println ("Role 的无参构造");
}
public Role(String name, String sex, int age)
{
this.age = age;
this.name = name;
this.sex = sex;
}
abstract void play ();
}
class Employee extends Role
{
private int salary;
static int id;
public Employee()
{
System.out.println ("Employee的无参构造");
}
public Employee(String name, String sex, int age, int salary, int id)
{
super(name, sex, age);
this.salary = salary;
Employee.id = id;//static 关键字修饰的变量要用类名调用
}
final void Sing()
{
System.out.println (getName()+"在开心的唱歌!!!");
}
void play()
{
System.out.println(getName()+"在玩游戏");
}
public void setSalary(int salary) {
this.salary = salary;
}
public int getSalary() {
return salary;
}
}
class Manager extends Employee
{
final String vehicle = "benchi";
}
public class Test
{
public static void main (String[] args)
{
Manager mana = new Manager();
Employee empl1 = new Employee();
System.out.println (mana.vehicle);
Employee empl2 = new Employee("张三", "男", 15, 11111, 007);
empl2.play();
empl2.Sing();
}
}