java三大特性的优点

java的三大特性(封装,继承,多态)

1.封装: 面向对象程式设计中,封装(Encapsulation)就是把类的内部与外界隔离起来,把实现数据和方法的包装(隐藏),防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过特定的方式。
2.继承:继承是所有OOP语言和Java语言不可缺少的部分。当创建一个类时,总是在继承,除非已经明确声明继承某个类,不然默认继承Java的标准根类Object。

    继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

3.多态 :多态的体现主要有两个方面:1、方法的重载和重写。2、对象的多态性。

计算机思维的例子

package com.demo.test;

import java.util.Scanner;

/**
 * 实现计算机计算器功能  输入两个数 numA numB 和运算符(+,-,*,/)
 * 缺点:1.面向客户的代码和业务实现的方法融合在一起
 * 不符合java的封装特性
 * 2.不利于拓展,如果我想增加运算,就必须修改代码
 * 3.代码不可复用,如果想使用只能通过复制粘贴
 * @author ADMIN
 *
 */
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//按照计算机思维的话就是,获取数字,然后获取运算符,计算出结果
		try {
			Scanner scan=new Scanner(System.in);
			System.out.println("请输入参数A:");
			int numA=Integer.parseInt(scan.nextLine());
			System.out.println("请输入参数B:");
			int numB=Integer.parseInt(scan.nextLine());
			System.out.println("请输入参运算符:");
			String operaStr=scan.nextLine();
			int sum = 0;
			switch (operaStr) {
			case "+":
				sum=numA+numB;
				break;
			case "-":
				sum=numA-numB;
				break;
			case "*":
				sum=numA*numB;
				break;
			case "/":
				if(numB==0) throw new Exception("被除数不能为0");
				sum=numA/numB;
				break;
			default:
				break;
			}
			System.out.println("计算结果:"+sum);
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("请检查输入");
		}
//		System.out.println(a);
	}

}

加入封装的理念之后

Operation.java

package com.demo.test.fengzhuang;

public class Operation {
	public Integer getResult(int numA,int numB,String operaStr) throws Exception {
		int sum = 0;
		try {
			switch (operaStr) {
			case "+":
				sum=numA+numB;
				break;
			case "-":
				sum=numA-numB;
				break;
			case "*":
				sum=numA*numB;
				break;
			case "/":
				if(numB==0) throw new Exception("被除数不能为0");
				sum=numA/numB;
				break;
			default:
				break;
			}
		}catch (Exception e) {
			// TODO: handle exception
			throw new Exception("请检查输入参数");
		}
		
		return sum;
	}
}

Main.java

package com.demo.test.fengzhuang;

import java.util.Scanner;

/**
 * 前面说了代码没有使用到封装,这里使用封装
 * 先说下封装的好处,
 * 1.界面逻辑和实现逻辑分离
 * 2.代码可复用   
 * 3.增加界面罗杰和增加实现逻辑分离不会相互影响
 * 不用继承缺点
 * 1.使用封装之后,虽然具备了可复用的特性,但是如果我扩增方法的时候,却会看到加减乘除的方法实现,能不能扩展的时候只关注自己的方法,而不用
 * 担心误操作影响到别的方法呢
 * 使用继承之后
 * 1.扩展简单
 * @author ADMIN
 *
 */
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入参数A:");
		int numA=Integer.parseInt(scan.nextLine());
		System.out.println("请输入参数B:");
		int numB=Integer.parseInt(scan.nextLine());
		System.out.println("请输入参运算符:");
		String operaStr=scan.nextLine();
		Operation opr=new Operation();
		try {
			int num=opr.getResult(numA, numB, operaStr);
			System.out.println("计算结果:"+num);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}

}

加入继承和多态之后

Operation.java

package com.demo.test.jicheng;

public class Operation {
	/**
	 * 获取数据
	 */
	protected int numA,numB;
	public Operation(int numA,int numB) {
		this.numB=numB;
		this.numA=numA;
	}
	public int getResult() {
		int sum=0;
		return 0;
	}
}

oprAdd.java

package com.demo.test.jicheng;

public class oprAdd extends Operation{

	public oprAdd(int numA, int numB) {
		super(numA, numB);
		// TODO Auto-generated constructor stub
	}
	@Override
	public int getResult() {
		return numA+numB;
	}

}

oprJian.java

package com.demo.test.jicheng;

public class oprJian extends Operation{

	public oprJian(int numA, int numB) {
		super(numA, numB);
		// TODO Auto-generated constructor stub
	}
	@Override
	public int getResult() {
		return numA-numB;
	}
}

OprSelect.java

package com.demo.test.jicheng;

public class OprSelect {
	public int getResult(int numA,int numB,String oprStr) {
		int sum=0;
		switch (oprStr) {
		case "+":
			sum=new oprAdd(numA,numB).getResult();
			break;
		case "-":
			sum=new oprJian(numA,numB).getResult();
			break;
		default:
			break;
		}
		return sum;
	}
}

Main.java

package com.demo.test.jicheng;

import java.util.Scanner;

/**
 * 使用继承的方式来完成计算器,就要考虑区分父类和基类以及判断什么时候使用是那种方法,这里还有堕胎
 * 多态的体现主要有两个方面:1、方法的重载和重写。2、对象的多态性
 * 
 * @author ADMIN
 *
 */
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入参数A:");
		int numA=Integer.parseInt(scan.nextLine());
		System.out.println("请输入参数B:");
		int numB=Integer.parseInt(scan.nextLine());
		System.out.println("请输入参运算符:");
		String operaStr=scan.nextLine();
		int sym=new OprSelect().getResult(numA, numB, operaStr);
		System.out.println("运算结果是:"+sym);
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值