一、封装
什么是封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装的步骤
1、私有化属性 修改属性的可见性
2、创建属性方法---setter/getter方法 创建公有的setter/getter方法
3、在set/get方法中设置赋值或取值条件 在setter/getter方法中加入属性控制语句
封装的意义:
1、便于使用者正确使用系统,防止错误修改属性
2、有助于系统之间的松耦合,提高系统独立性
3、提高软件的可重用性
4、降低了构建大型系统的风险
二、课后习题
1、模拟一个简单的购房商贷月供计算器,按照以下公式计算总利息和每月还款金额
总利息=贷款金额*利率;
每月还款金额=(贷款金额+总利息)、贷款年限
贷款年限不同利率也不同,如下示例:
package com.java_1_16_fangdai;
/**
* 计算总计息及月供
* @author Administrator
*2019-1-16
*/
public class Rate {
private double money;//本金
private double sum;//总利息
private int year;//年限
private double monMoney;
public double getMonMoney() {
return monMoney;
}
public void setMonMoney(double monMoney) {
this.monMoney = monMoney;
}
public int getYear() {
return year;
}
//根据选择确定贷款年限
public void setYear(int num) {
if(num==1) {
this.year = 3;
}else if(num==2){
this.year = 5;
}else if(num==3) {
this.year = 20;
}else {
System.out.println("报歉!目前无此贷款年限,默认5年!");
this.year = 5;
}
}
public double getSum() {
return sum;
}
public void setSum(double sum) {
this.sum = sum;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
//根据年限算出总利息
public double rateMoney() {
switch(year) {
case 3:
this.sum = this.money*0.0603;
break;
case 5:
this.sum = this.money*0.0612;
break;
case 20:
this.sum = this.money*0.0639;
default:
break;
}
return this.sum;
}
//计算月供并输出
public void monthly() {
this.monMoney = (this.money + this.sum)/(this.year*12);
System.out.println("每个月的月供是:"+this.monMoney);
}
}
package com.java_1_16_fangdai;
import java.util.Scanner;
public class RateTest {
public static void main(String[] args) {
Scanner cxj = new Scanner(System.in);
Rate r = new Rate();
System.out.print("请输入贷款金额:");
r.setMoney(cxj.nextDouble());
System.out.print("请选择贷款年限(1、3年(36个月) 2、5年(60个月) 3、20年(240个月)):");
r.setYear(cxj.nextInt());
System.out.println("总利息是:"+r.rateMoney());
r.monthly();
}
}
结果示例:
2、根据三角形的三条边长,判断是直角三角形、钝角三角形或者锐角三角形
package com.java_1_16_trigon;
/**
* 判断三角形种类
* @author Administrator
*2019-1-16
*/
public class Trigon {
private int a;
private int b;
private int c;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
public void trTest() {
//先判断是否可以构成三角形
if(((a+b)>c)&&((a+c)>b)&&((b+c)>a)){
//如果可以构成三角形,再判断是否为直角三角形
if(((a*a+b*b)==c*c)||((a*a+c*c)==b*b)||((b*b+c*c)==a*a)) {
System.out.println("这是一个直角三角形。");
//如果不直角,再判断是钝角三角形还是锐角三角形
}else if(((a*a+b*b)<c*c)||((a*a+c*c)<b*b)||((b*b+c*c)<a*a)) {
System.out.println("这是一个钝角三角形。");
}else {
System.out.println("这是一个锐角三角形。");
}
//不足构成三角形
}else {
System.out.println("这不是一个三角形。");
}
}
}
package com.java_1_16_trigon;
import java.util.Scanner;
public class TrTest {
public static void main(String[] args) {
Scanner cxj = new Scanner(System.in);
Trigon t = new Trigon();
boolean select = true;
do {
System.out.print("请输入第一条边的大小:");
t.setA(cxj.nextInt());
System.out.print("请输入第二条边的大小:");
t.setB(cxj.nextInt());
System.out.print("请输入第三条边的大小:");
t.setC(cxj.nextInt());
t.trTest();
System.out.print("请问是否继续(y/n):");
String se = cxj.next();
if(se.equals("n")) {
select = false;
}else {
select = true;
}
}while(select);
System.out.println("感谢您的使用!");
}
}
结果示例: