继续上边的计算器例子,再改一次,将业务逻辑和界面逻辑分开,降低程序的耦合度,也可以提高复用度。
Java静态方法和实例方法的区别:静态方法可以使用类名.方法来进行调用,即:不用实例化实例也可以调用,而实例方法只能实例化有对象了,才可以调用;静态方法只能调用静态成员和静态方法,而实例方法没有这种限制。
import java.util.Scanner;
public class Operation {
public static Double getResult(String choice,Double numberA,Double numberB) {
Double result = 0.0;
switch(choice) {
case "+" :
result = numberA + numberB;
break;
case "/" :
if(numberB == 0) {
System.out.println("除数不能为0!");
} else {
result = numberA/numberB;
break;
}
}
return result;
}
}
import java.util.Scanner;
public class Custom {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要运算的第一个数字:");
Double numberA = sc.nextDouble();
System.out.println("请选择您需要的操作:+、/");
String choice = sc.next();
System.out.println("请输入要运算的第二个数字:");
Double numberB = sc.nextDouble();
Double result = 0.0;
result = Operation.getResult(choice,numberA,numberB);
System.out.println("运算的结果为:" + result);
}
}
小例子:界面和逻辑分开。这个过程叫:面向对象三大特性的一个:封装。把业务逻辑进行封装。
大家都知道子类继承父类是类型的继承,包括属性和方法!如果子类和父类中的方法签名相同就叫覆盖!如果子类和父类的属性相同,父类就会隐藏自己的属性!
但是如果我用父类和子类所创建的引用指向子类所创建的对象,父类引用所调用子类对象中的属性值或方法的结果是什么呢?
public class FieldDemo {public static void main(String[] args){
Student t = new Student("Jack");
Person p = t;//父类创建的引用指向子类所创建的对象
System.out.println(t.name+","+p.name);
System.out.println(t.getName()+","+p.getName());
}
}
class Person{
String name;
int age;
public String getName(){
return this.name;
}
}
class Student extends Person{
String name; // 属性和父类属性名相同,但在做开发时一般不会和父类属性名相同!!
public Student(String name){
this.name = name;
super.name = "Rose"; // 为父类中的属性赋值
}
public String getName(){
return this.name;
}
}
返回结果是:Jack,Rose
Jack,Jack
原因是:在Java中,属性绑定到类型,方法绑定到对象!
简易计算器小例子,继续采用继承的思想进行改造:
public class Operation {
private Double _numberA = 0.0;
private Double _numberB = 0.0;
public Double getNumberA(){
return _numberA;
}
public void setNumberA(Double numberA) {
_numberA = numberA;
}
public Double getNumberB() {
return _numberB;
}
public void setNumberB(Double numberB) {
_numberB = numberB;
}
public Double getResult(){
Double result = 0.0;
return result;
}
}
暂时到这,下次再看。
public class AddOperation extends Operation {
public Double getResult() {
Double result = 0.0;
result = getNumberA()+getNumberB();
return result;
}
}
public class DivOperation extends Operation {
public Double getResult() {
Double result = 0.0;
if(getNumberB() == 0) {
System.out.println("除数不能为零!");
} else {
result = getNumberA() / getNumberB();
}
return result;
}
}