面向对象练习

1、写一个名为 Account 的类模拟账户。该类包括的属性:账号 id,余额 balance,年利率 annualInterestRate;包含的方法:访问器方法(getter 和setter 方法),返回年利率的方法 getMonthlyInterest(),取款方法 withdraw(),存款方法deposit()。创建 Account 类的一个子类 CheckAccount 代表可透支的账户,该账户中定义一个属性overdraft 代表可透支限额。在 CheckAccount 类中重写 withdraw 方法,其算法如下:如果(取款金额<账户余额),可直接取款如果(取款金额>账户余额),计算需要透支的额度判断可透支额 overdraft 是否足够支付本次透支需要,如果可以将账户余额修改为 0,可透支金额如果不够提示用户超过可透支额的限额。

abstract class Account{
    private int id;
    private double balance;
    double annuallnterestRate;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public void setAnnuallnterestRate(double num){
        this.annuallnterestRate=num;
    }

    public double getMonthlylnterest(){
        return  annuallnterestRate/12;
    }

    public abstract void withdraw(double num);

    public void deposit(double num){
            setBalance(getBalance()+num);
    }
}
public class CheckAccount extends Account {
    private  double overdraft;

    public double getOverdraft() {
        return overdraft;
    }

    public void setOverdraft(double overdraft) {
        this.overdraft = overdraft;
    }

    public void withdraw(double num){
        if(getBalance()>=num){
            double last=getBalance()-num;
            setBalance(last);
        }
        else {
            if (getBalance()-num>= getOverdraft()) {
                System.out.println("超过可透支额的限额");
            } else {
                setOverdraft(getOverdraft()+getBalance()-num);
                setBalance(0);
            }
        }
    }
}

2、定义员工类Employee,包含姓名、工号和工资,包含计算奖金方法bonus,普通员工和经理都是员工,计算奖金的方法为工资*奖金系数,普通员工的奖金系数为1.5(常量),经理为2(常量),分别实现bonus方法,创建对象测试。

package Employee;

abstract class Employee {
    private String name;
    private String id;
    private int wages;

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getWages() {
        return wages;
    }

    public void setWages(int wages) {
        this.wages = wages;
    }
    public abstract double bonus();
}

package Employee;

public class Test {
    public static void main(String[] args) {
        Employee zzx=new Manager();
        zzx.setWages(33);
        System.out.println(zzx.bonus());
    }
}

package Employee;

public class OrdinaryStaff extends Employee{
    @Override
    public double bonus() {
        return 1.5*getWages();
    }
}

package Employee;

public class Manager extends Employee{

    @Override
    public double bonus() {
        return 2*getWages();
    }
}

3、封装一个西游记人物类Person:包含私有属性:姓名(name)、身高(height)、武器(weapon)、种族(race),并提供get方法和set方法。在测试类中实例化三个对象:tangseng(唐僧)、sunwukong(孙悟空)、baigujing(白骨精),分别设置他们的种族为:人族、仙族、妖族在打印对象时,按照例如:“姓名:孙悟空;种族:仙族”的格式在控制台输出信息。提供一个技能方法void skill(),这个方法根据当前对象name属性判断技能,如果是孙悟空,就打印“七十二变”,如果是唐僧,就打印“紧箍咒”,如果是白骨精,就打印“九阴白骨爪”,在测试类中调用这个方法。

package Person;

abstract class Person {
    private String name;
    private int heigth;
    private String weapon;
    private String race;

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }

    public String getName() {
        return name;
    }

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

    public int getHeigth() {
        return heigth;
    }

    public void setHeigth(int heigth) {
        this.heigth = heigth;
    }

    public String getWeapon() {
        return weapon;
    }

    public void setWeapon(String weapon) {
        this.weapon = weapon;
    }
    public abstract void skill();
}

package Person;

public class Tangseng extends Person{

    @Override
    public void skill() {
        System.out.println("紧箍咒");
    }
}

package Person;

public class Sunwukong extends Person{
    @Override
    public void skill() {
        System.out.println("七十二变");
    }
}

package Person;

public class Baigujing extends Person{
    @Override
    public void skill() {
        System.out.println("九阴白骨爪");
    }
}

package Person;

public class Test {
    public static void main(String[] args) {
        Person person=new Sunwukong();
        person.skill();
    }
}

4、== 与 equals方法的区别
==:在比较基本数据类型看内容是否一样,比较引用数据类型看地址是否一样
equals:专门判断引用类型的地址是否一样,但是String类重写了object的equals方法,在比较字符串时equals看内容是否一样。
5、父类GeometricObject代表几何形状,子类Circle代表圆形,MyRectangle代表矩形。定义一个测试类GeometricTest,编写equalsArea方法测试两个对象的面积是否相等,编写displayGeometricObject方法显示对象的面积。

package GeometricObject;

 abstract class GeometricObject {
  public abstract void displayGeometricObject(double are);
  public static boolean equalsArea(double area1,double area2){
   return area1 == area2;
  }
}
package GeometricObject;

public class Circle extends GeometricObject{
    @Override
    public void displayGeometricObject(double area) {
        System.out.println("圆的面积为:"+area);
    }
}

package GeometricObject;

public class MyRectangle extends GeometricObject{
    @Override
    public void displayGeometricObject(double are) {
        System.out.println("矩形的面积为:"+are);
    }
}

package GeometricObject;

public class Test {
    public static void main(String[] args) {
        GeometricObject geometricObject1=new Circle();
        geometricObject1.displayGeometricObject(66);
        GeometricObject geometricObject2=new MyRectangle();
        geometricObject2.displayGeometricObject(66);
        System.out.println(GeometricObject.equalsArea(66,66));
    }
}

6、简述接口的特点以及接口与抽象类的区别。
一个类可以同时实现多个接口,但是只能继承一个抽象类(解决Java不能多继承)
抽象类可以包含具体的方法,接口的所有方法都是抽象的(jdk8以后接口允许有普通方法和静态方法);
抽象类 定义用关键字class,接口用interface。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值