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。