类的三大特征:封装,继承,多态

封装:
封装是指隐藏对象的属性和实现细节,禁对外公开接口.封装能为软件带来以下优点:
(1)便于使用者正确、方便地理解和使用系统,防止使用者错误地修改系统的属性。以供电系统为例,现在的房屋里电线都是以暗线来装修的,在墙壁上只留下一些电源插口。为了简单,而且暴露在外的电线不安全也不美观。这就是封装的优点。
(2)有助于建立各个系统之间的松耦合关系,提高系统的独立性。当某一个系统的实现发生变化时,只要他的借口不发生变化,就不会影响到其他的系统。
(3)提高代码的可重用性,每个系统都是一个相对独立的整体,可以在多种环境中得到重用。例如干电池就是一个可重用的系统,在相机,手电筒,玩具赛车中都可以得到重用。
(4)大大的降低了构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然是有价值的。例如相机坏了,他的干电池依然可用,可以安装到手电筒上。
有四种访问控制级别:
   public:对外公开,访问级别最高。
   protected:只对一个包中的类或者子类公开。
   默认:只对同一个包中的类公开。
   private:不对外公开,只能在对象内部访问,访问级别最低。


下面是对一个计算器转换数学进制的类:如果用户选择二进制,计算器就会把当前的数字转换为二进制;如果选择十六进制,计算器就会把当前数字转换为十六进制:

public class TransferNum {
		/**代表当前数据*/
		private int data;
	
		/**代表计算器当前数学进制*/
		private int scale;
		
		/**对计算器当前的数据进行数学转换,不对外公开*/
		private void transfer(int oldSacle,int scale){
		
		}
	
		/**设置数学进制,对外公开的接口*/
		public void setScale(int scale){
			int oldScale=this.scale;
			this.scale=scale;
			transfer(oldScale,scale);
		}
	}

继承:
电视(Tv)和电脑(Computer)都具有type、color、price的属性和power()的行为,因此可以抽象出一个电器类(Wiring),Tv和Computer就是Wiring的两个子类。

	/**电器类*/
	public class Wiring {
	private String type ;
	private String color;
	private int price;
		
	public Wiring() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Wiring(String type, String color, int price) {
		super();
		this.type = type;
		this.color = color;
		this.price = price;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public void power(){
		
	}
	
	}
	/**电视*/
	public class Tv extends Wiring{
	private String size;
	
	
	public String getSize() {
		return size;
	}

	public void setSize(String size) {
		this.size = size;
	}
	
	
	public Tv() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Tv(String type, String color, int price) {
		super(type, color, price);
		// TODO Auto-generated constructor stub
	}

	public void showInfo(){
		System.out.println(this.getSize()+" "+super.getType()+" "+super.getColor()+" "+super.getPrice());
	}
	}
	/**电脑*/
	public class Computer extends Wiring {
	private String cpu;

	public Computer() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Computer(String type, String color, int price) {
		super(type, color, price);
		// TODO Auto-generated constructor stub
	}
	}
子类继承父类关键字extends,子类调用父类的方法用super。在上面的电视和电脑中继承了电器的所有属性和行为,但又分别具有size、cpu的属性和getInfo()的行为。
在父类和子类之间存在着继承和扩展关系。子类继承了父类的属性和方法,同时,子类中海可以扩展出新的属性和方法,并且还可以覆盖父类中方法的实现方式(也就是在子类中重新实现父类中的方法)。例如手机,早期的手机只具有打电话的功能,而现在的手机多了拍照,发送信息等等的功能,现在的手机具备越来越多的功能,生产手机的厂商他们不必从头生产,而是在原有手机的基础上进行升级。继承与扩展同时提高了系统的可重用性和可扩
展性。


多态:
多态是指当系统A访问系统B的服务是,系统B可以通过多种实现方式来提供服务,而这一切对系统A是透明的。例如某电动剃须刀Shaver既可以用干电池,也可以用交流电。干电池Battery和交流电源ACPower都具有供电的功能,不妨抽象出父类--电源类Power。
电动剃须刀是一个包含电源子系统的组合系统。电源类Power是一个抽象类,他有一个抽象方法providePower(),他是电源子系统对外提供的接口

下面是Shaveer类

public class Shaver {
	private Power power;

	public Shaver(Power power) {
		this.power = power;
	}

	public Shaver() {
	}
	public void shave(){
		power.providePower();
		
	}
	
}
在电动剃须刀的Shave()方法中,调用电源的providePower()方法。

	power.providePower();
此处的电源既有可能是Buttery对象,也有可能是ACPower对象。下面是电动剃须刀使用交流电源工作

	Shaver shaver=new Shaver();
	shaver.setPower(new AcPower());
	shaver.shave;
下面是电动剃须刀使用干电池工作

	Shaver shaver=new Shaver();
	shaver.setPower(new Battery());
	shaver.shave;





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值