Java程序设计第五章作业

1 问答题

1.Java的访问控制修饰符有哪些?各有什么访问权限?请对照第7页ppt的表格分别写程序验证

private修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用。因此,private 修饰符具有最高的保护级别。
default表示没有修饰符,只有同一个包的类能访问。
protected表示可以被同一个包的类以及其他包中的子类访问。
public表示可以被改项目的所有包中的所有类访问。
例如:

class Control {
    private int a;
    public int b;
    protected int c;
}

public class Test{
    public static  void main(String[] args){
        Control s = new Control();
        //s.a=5; 错误
        s.b=6;
        s.c=8;
        System.out.println(s.b);
        System.out.println(s.c);
    }
}

2.子类对于从父类继承的哪些属性与方法是可见的?请分别写程序进行验证

public、protected的属性和方法在子类是可见的。
例如:

class Plane{
    protected  String name;
    public void setName(String _name){
        name = _name;
    }
    public String getName(){
        return name;
    }
}

class FighterPlane extends Plane{
    private int missileNum;
    public void setNum(int _missileNum) {
        missileNum = _missileNum;
    }
    public void fire(){
        missileNum -= 1;
    }
}

class Test{
    public static void main(String[] args){
        FighterPlane p = new FighterPlane();
        p.name = "su35";
        p.setName("f35");
        System.out.println(p.getName());
        p.fire();
    }
}

输出结果:

f35

3.什么是组合?有什么作用?请举例说明。

把旧类对象作为新类的成员变量。可实现类的复用。
例如:

class FighterPlane
{
    String name;
    int missileNum;
    public FighterPlane(String _name, int _missileNum) {
        name = _name;
        missileNum = _missileNum;
    }
    public void fire(){
        if (missileNum>0){
            System.out.println("now fire a missile !");
            missileNum -= 1;
        }else{
            System.out.println("No missile left !");
        }
    }
}

class A
{
    FighterPlane fp;
    public A(FighterPlane fpp){
        this.fp = fpp;
    }
    public void fireMissle(){
        fp.fire();
    }
}

public class Run{
    public static void main(String[] args){
        FighterPlane ftp = new FighterPlane("su35",10);
        A a = new A(ftp);
        a.fireMissle();
    }
}

4.什么是重载?有什么作用?请举例说明

重载:方法名称相同,参数类型或个数不同。对象在不同状态下(多态)调用重载函数得到的结果可以不一样。
例如:

public class Parent{
    public int getScore(){
        return 3;
    }
    public int getScore(int i){
        return i;
    }
    public String getScore(String c){
        return c;
    }
    public static void main(String[] args){
        Parent p = new Parent();
        Parent t = new Parent();
        Parent m = new Parent();
        System.out.println(p.getScore());
        System.out.println(t.getScore(5));
        System.out.println(m.getScore("A"));
    }
}

输出结果:

3
5
A

5.什么是覆盖?有什么作用?请举例说明

覆盖:子类对父类的同名方法(方法名称相同,参数相同,返回类型相同)重新进行定义,即在子类中定义与父类中已定义的同名而内容不同的方法。这使得子类能够根据需要实现父类的方法,是父类和子类之间多态的一种表现。
例如:

class Parent {
    public int getScore(){
        return 3;
    }
    public String getCountryName(){
        return "China";
    }
}

class Son extends Parent {
    public int getScore(){
        return 4;
    }
}

public class RunSon{
    public static void main(String[] args){
        Son s = new Son();
        System.out.println(s.getScore());
        System.out.println(s.getCountryName());
    }
}

输出结果:

4
China 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值