第三周考试

一.简答题
    1.请描述下NullPointerException和ArrayIndexOutOfBoundsException,ClassCastException
            出现的原因以及如何解决?

NullPointerException,空指针异常,根据提示错误行数进行修改对应的出现null的对象
ArrayIndexOutOfBoundsException,数组越界,改回索引值内
ClassCastException,强制类型专管异常,使用instanceof解决    
    
    2.this和super的区别

所表示的实例不同             调用的构造不同        访问的成员不同        使用方式不同

    3.什么是多态,多态的成员访问特点

同一个对象,在不同时刻表现出来的不同形态
多态中成员访问特点:
  A:成员变量
    编译看左边,运行看左边。
  B:构造方法
    创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
  C:成员方法
    编译看左边,运行看右边
  D:静态方法 
    编译看左边,运行看左边
    (静态和类相关,算不上重写,所以访问是左边)
由于成员方法存在重写,所以运行看右边 

    4.final关键字的特点是什么

最终的,无法修改的
修饰符,该类不能继承
修饰成员方法,该方法不能被重写
修饰成员变量,此时变量是一个常量-----"自定义常量"
        修饰的变量,只能被赋值一次,而且修饰成员变量,必须给一个常量值
        修饰局部变量,赋值一次后,不能够再次赋值了

    5.请您使用自己的话来描述对多态的理解?

不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性

二.
编程题
1.设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)这个属性,
还有开灯(on)这个方法。设计一个灯泡类(Buble),
灯泡类有发亮的方法,其中有红灯泡类(RedBuble)和绿灯泡类(GreenBuble)
他们都继承灯泡类(Buble)一个发亮的方法,请设计出一段代码可以使台灯开启灯泡发亮
红灯泡发红光,绿灯泡发绿光!(多态)


public class Lamp {
    private Buble buble;
    public Buble getBuble() {
        return buble;
    }
 
    public void setBuble(Buble buble) {
        this.buble = buble;
    }
 
    public void on(Buble buble){
        if(buble instanceof RedBuble){
            String r=buble.bright();
            System.out.println("打开台灯"+r);
        }else if(buble instanceof GreenBuble){
            String g=buble.bright();
            System.out.println("打开台灯"+g);
        }
 
    }
}
public abstract class Buble {
 
    public Buble(){
 
    }
 
    public abstract String bright();
 
}
public class RedBuble extends Buble {
 
    public String bright(){
 
       return "红灯泡发亮";
 
    }
 
}
public class GreenBuble extends Buble{
 
    public String bright(){
 
        return "绿灯泡发亮";
 
    }
 
}
public class BubleTest {
 
    public static void main(String[] args){
 
        Lamp lamp=new Lamp();
 
        Buble red=new RedBuble();
 
        Buble green=new GreenBuble();
 
        lamp.on(green);
 
    }
 
}


2.编写一个Person抽象类,要求含有姓名(name)年龄(age)两个私有属性以及吃饭(eat)
 和睡觉(sleep)两个抽象方法,并写出带参构造方法,
            创建学生(student)和工人(worker) 两个类,继承Person类,
            学生类多出了私有属性学号和学习方法(输出我爱学习),
             工 人类多出了私有属性工号和工作方法(输出我爱工作)
             
public abstract class Person {
    private String name ;
    private int age ;
    public abstract void eat() ;
    public abstract void sleep() ;
    public Person(){

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Student extends Person {
    private int stucode ;
    private String stumens ;
    public Student(String name , int age , int stucode){
        super(name, age) ;
        this.stucode = stucode ;
        System.out.println(this.getName()+this.getAge()+this.stucode) ;
    }
    public  void eat(){

        System.out.println("食堂吃饭") ;
    }
    public void sleep(){
        System.out.println("我爱学习") ;
    }
}

public class Worker extends Person {
    private int worcode ;
    private String wormens ;
    public Worker(String name , int age , int worcode){
        super(name, age) ;
        this.worcode = worcode ;
        System.out.println(this.getName()+this.getAge()+this.worcode) ;
    }
    public  void eat(){
        System.out.println("自己做饭") ;
    }
    public void sleep(){
        System.out.println("在家躺着睡觉") ;
    }
    public void study(){
        System.out.println("我爱工作") ;
    }
}

public class Mains {
    public static void main(String[] args) {
        Student s = new Student("张三",18,9527) ;
        s.eat();
        s.sleep();
        Worker w = new Worker("李四",25,9876) ;
        w.eat();
        w.sleep();
        w.study();
    }
}

3.已知username 和password都是”admin“,键盘录入用户名和密码和已知的用户名和密码比较,模拟用户登录,给三次机会
    如果信息一致,则提示“登录成功”,
        否则,提示“您还剩 x 次机会”
        如果达到三次了,提示“您的账号被锁定,请联系管理员”    (提示:字符串比较:使用equals方法)


import java.util.Scanner;
 
public class Test1 {
public static void main(String[] args) {
    String userName="admin";
    String passWord="admin";
    String name=null,pass=null;
    int num=0;
    Scanner sc=new Scanner(System.in);   
    while(num<3) {
        System.out.println("请输入用户名");
        name=sc.nextLine();
        System.out.println("请输入密码");
        pass=sc.nextLine();
        if(name.equals(userName)&&pass.equals(passWord)){
            System.out.println("成功登陆系统");
            break;
        }else {
            System.out.println(" 用户名或者 密码错误请重新 输入");
            num++;
        }
    }
    if(num>=3){
        System.out.println("输入错误3次,退出系统");
        System.exit(0);
    }
}
}
4.设计程序
        定义一个人类,包括属性:姓名、性别、年龄、国籍;包括方法:吃饭、睡觉,工作。
        1)根据人类,派生一个学生类,
        增加属性:学校、学号;重写工作方法(学生的工作是学习)
        2)根据人类,派生一个工人类,增加属性:单位、工龄;重写工作方法(工人的工作是。。。。自己自定义功能)
        3)根据学生类,派生一个学生干部类,增加属性:职务;增加方法:开会
        4)编写主函数分别对上述3类具体人物进行测试

public class People {
    String name;
    String gender;
    int age;
    String nationality;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getNationality() {
        return nationality;
    }

    public void setNationality(String nationality) {
        this.nationality = nationality;
    }

    public void eat() {
        System.out.println("People吃饭");
    }

    public void sleep() {
        System.out.println("People睡觉");
    }

    public void work() {
        System.out.println("People工作");
    }

public class Student extends People {
    String school;
    String schoolId;

    public void work() {
        System.out.println("学生的工作是学习");
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public String getSchoolId() {
        return schoolId;
    }

    public void setSchoolId(String schoolId) {
        this.schoolId = schoolId;
    }
}

public class Worker extends People {
    String campany;
    int workyear;

    public void work() {
        System.out.println("工人的工作是检查仪容仪表");
    }

    public String getCampany() {
        return campany;
    }

    public void setCampany(String campany) {
        this.campany = campany;
    }

    public int getWorkyear() {
        return workyear;
    }

    public void setWorkyear(int workyear) {
        this.workyear = workyear;
    }

}

public class StudentCadre extends Student {
    String post;

    public void meeting() {
        System.out.println("====开会");
    }

    public String getPost() {
        return post;
    }

    public void setPost(String post) {
        this.post = post;
    }
}

public class Text {
    public static void main(String[] args) {
        People s = new People();
        Student a = new Student();
        StudentCadre c = new StudentCadre();
        s.setName("张三");
        s.setAge(18);
        s.setGender("男");
        s.setNationality("中国");
        a.setSchool("家里蹲");
        a.setSchoolId("513023");
        c.setPost("班长");
        System.out.println("姓名:" + s.getName());
        System.out.println("年龄:" + s.getAge());
        System.out.println("性别:" + s.getGender());
        System.out.println("国籍:" + s.getNationality());
        System.out.println("学校:" + a.getSchool());
        System.out.println("学号:" + a.getSchoolId());
        System.out.println("职务:" + c.getPost());
        s.eat();
        s.sleep();
        s.work();
    }
}


5 .定义一个动物类,里面有一个方法voice(),
        定义一个类Cat,实现voice方法
        然后增加一种新的动物类型:Pig(猪),实现voice()方法。
        定义一个Dog类,实现voice方法
        定义一个Store(宠物店)类的getInstance方法:
        如果传入的参数是字符串dog,则返回一个Dog对象;
        如果传入pig,则返回一个Pig对象;否则,返回一个Cat对象。
        
        提示:字符串进行判断 通过equals(字符串)方法

abstract class Animal{
    public abstract void voice();
}
class Pig implements Animal{
    public void voice(){
        System.out.println("henghengheng");
    }
}
class Dog implements Animal{
    public void voice(){
        System.out.println("wangwangwang");
    }
}
class Cat implements Animal{
    public void voice(){
        System.out.println("喵喵喵");
    }
}
class Store{
    public Animal getInstance(String name){
        if("Pig".equals(name)){
            return new Pig();
        }else if("Dog".equals(name)){
            return new Dog();
        }else{
            return new Cat();
        }
    }
}

6.(封装、继承)有以下几个类,根据下面的继承关系,用 Java 代码实现。
    a) Circle 类(圆形),属性:半径;方法:求周长、求面积
    b) Rect 类(矩形),属性:长、宽;方法:求周长、求面积
    c) Square 类(正方形),属性:边长;方法:求周长、求面积
    提示:
    1) 这三个类均具有求周长和面积的方法;
    2) 正方形是特殊的矩形
    
    
package com.fxm.test;
public class Test7{
    public static void main(String args[]){
        Circle c = new Circle();
        c.area();
        c.girth();
    }
}
class Shape{
    public double area(){        
        return 0.0;
    }
    public double girth(){
        return 0.0;
    }
}
class Circle extends Shape{
    double radius;
    public Circle(){}
    public Circle(double radius){
        this.radius = radius;
    }
    public void setRadius(double radius){
        this.radius = radius;
    }
    public double getRadius(){
        return radius;
    }
    public double area(){
        return (3.14*radius*radius);
    }
    public double girth(){
        return (6.28*radius);
    }
}
class Rect extends Shape{
    private double length;
    private double width;
    public void Rect(){}
    public void Rect(double length,double width){
        this.length = length;
        this.width = width;
    }
    public void setLength(double length){
        this.length = length;
    }
    public void setWidth(double width){
        this.width = width;
    }
    public double getLength(){
        return length;
    }
    public double getWidth(){
        return width;
    }
    public double area(){
        return (length*width);
    }
    public double girth(){
        return ((length+width)*2);
    }
}
class Square extends Shape{
    private double length;
    public void setLength(double length){
        this.length = length;
    }
    public double getLength(){
        return length;
    }
    public double area(){
        return (length*length);
    }
    public double girth(){
        return (length*4);
    }
}

7.假如我们在开发一个系统时需要对员工类类进行设计,程序员是员工,包含3个属性:姓名、工号以及工资。
    经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。
    请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问。(多态方式测试)


class Employee{
    private String name;
    private int eId ;
    private int money;
    public Employee() {
        super();
    }
    public Employee(String name, int eId, int money) {
        super();
        this.name = name;
        this.eId = eId;
        this.money = money;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getEId() {
        return eId;
    }
    public void setEId(int eId) {
        this.eId = eId;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }

    public void getWage() {
        System.out.println("已经领取工资");
    }
}

class Manager extends Employee{
    private int prize; 
    public Manager() {
        super();
    }
    public Manager(String name, int eId, int money,int prize) {
        super(name, eId, money);
        this.prize = prize;
    }
    public int getPrize() {
        return prize;
    }
    public void setPrize(int prize) {
        this.prize = prize;
    }

    public void getWage() {
        System.out.println("经理已经领取工资");
    }

    public void getAward() {
        System.out.println("已经领取奖金"+prize);    
    }
}

class Programmer extends Employee{
    public Programmer() {
        super();
    }
    public Programmer(String name, int eId, int money) {
        super(name, eId, money);
    }
    public void getWage() {
        System.out.println("程序员已经领取工资");
    }
    public void love() {
        System.out.println("程序员很辛苦,但是工资很高...");
    }
}

public class Test2 {
    public static void main(String[] args) {
        Programmer programmer = new Programmer("程序员",10010,5000);
        System.out.println("name:"+programmer.getName());
        System.out.println("num:"+programmer.getEId());
        System.out.println("money:"+programmer.getMoney());
        programmer.getWage();
        System.out.println("-----------------------");
        Manager manager = new Manager();
        manager.setName("经理");
        manager.setEId(11001);
        manager.setMoney(10000);
        manager.setPrize(3000);
        System.out.println("name:"+manager.getName());
        System.out.println("num:"+manager.getEId());
        System.out.println("money:"+manager.getMoney());
        manager.getWage();
        manager.getAward();
    }
}
 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值