面向对象--练习题
练习题
/*
定义一个类Demo,其中定义一个求两个数据和的方法,定义一个测试了Test,进行测试。
*/
class Demo {
//第一种方式:
// public int sum() {
// int a = 11;
// int b = 22;
// int c = a + b;
// return c;
// }
//第二种方式:
//通过第一种方式实现了我们题目的需求
//但是不好,因为加法的数值写固定了,所以不好
//改进:可以将来传两个值进来
public int sum(int x, int y) {
return x + y;
}
//第二种方式对然相比较于第一种方式来说,虽然我们可以进行手动传入参数,但是
//实现的过程并没有用到面向对象的封装的知识
//我们可以尝试将两个参数定义为成员变量
//第三种方式:
// private int a;
// private int b;
//
// public int sum(int a,int b){
// this.a = a;
// this.b = b;
// return (this.a+this.b);
// }
//问题:哪一种方式实现该问题的最优解?
//其实,我们在面对业务问题的时候,什么时候考虑使用面向对象的思想
//或者换句话说,什么情况下,将我们问题中的参数定义成成员变量呢?
//只有当我们题目中参数与该类形成属性和行为的关系的时候,才定义成成员变量
//因为类是用来描述现实世界事物的,
//所以也就说成员变量是用来描述类
//所以,这道题,第二种方式是最优解。
}
public class Test1 {
public static void main(String[] args) {
//创建对象
Demo d = new Demo();
int sum = d.sum(65,70);
System.out.println(sum);
}
}
/*
定义一个长方形类,定义 求周长和面积的方法,
然后定义一个测试了Test2,进行测试。
长方形周长:(长+宽)* 2
长方形的面积:长 * 宽
*/
class Rectangle {
private int length;
private int width;
Rectangle() {
}
Rectangle(int length, int width) {
if (length > width) {
this.length = length;
this.width = width;
} else {
this.length = width;
this.width = length;
}
}
public void setLength(int length) {
this.length = length;
}
public int getLength() {
return length;
}
public void setWidth(int width) {
this.width = width;
}
public int getWidth() {
return width;
}
public int getPerimeter() {
return (length + width) * 2;
}
public int getArea() {
return length * width;
}
}
public class Test2 {
public static void main(String[] args) {
//使用带参数的构造方法创建对象
Rectangle r1 = new Rectangle(10, 20);
System.out.println("长方形的长为:" + r1.getLength());
System.out.println("长方形的宽为:" + r1.getWidth());
System.out.println("长方形的面积为:" + r1.getArea());
System.out.println("长方形的周长为:" + r1.getPerimeter());
}
}
/*
定义一个员工类,自己分析出几个成员,
然后给出成员变量,构造方法,getXxx()/setXxx()方法,
以及一个显示所有成员信息的方法。并测试。
员工:
属性:工号,姓名,年龄,薪水
行为:敲代码,吃饭,喝水
*/
class Staff {
private String id;
private String name;
private int age;
private int salary;
Staff() {
}
Staff(String id, String name, int age, int salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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 int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
//以及一个显示所有成员信息的方法
public void show() {
System.out.println("工号:" + id + ",姓名:" + name + ",年龄:" + age + ",薪水:" + salary);
}
}
public class Test3 {
public static void main(String[] args) {
//使用带参数的构造方法创建对象
Staff s = new Staff("SJ005","王友虎",18,1000000);
s.show();
}
}
/*
定义一个类MyMath,提供基本的加减乘除功能,然后进行测试
导包import语句在所有的class之前
*/
import java.util.Scanner;
class MyMath {
//加法功能
public int add(int a, int b) {
return a + b;
}
//减法功能
public int sub(int a, int b) {
return a - b;
}
//乘法功能
public int mul(int a, int b) {
return a * b;
}
//除法功能
public double div(int a, int b) {
return (a * 1.0) / b;
}
}
public class Test4 {
public static void main(String[] args) {
MyMath compute = new MyMath();
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据num1:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数据num2:");
int num2 = sc.nextInt();
System.out.println("num1+num2=" + compute.add(num1, num2));
System.out.println("num1-num2=" + compute.sub(num1, num2));
System.out.println("num1*num2=" + compute.mul(num1, num2));
System.out.println("num1/num2=" + compute.div(num1, num2));
}
}