Java周总结之面对对象

这篇文章主要是面对对象是啥子、为啥要对对象、面对对象编程该怎么实现

一.什么是面对对象

对象的定义是人们要进行研究的任何事物,例如人、动物,到具体的某个人、某个动物都是对象。还能表示抽象的规则、计划或事件。面向对象这个对象,指的是客体。所谓客体是指客观存在的对象实体和主观抽象的概念。

二.为啥要面对对象

面向对象是为了解决系统的可维护性,可扩展性,可重用性那为啥可以解决可维护性,可扩展性,可重用性呢???
那是因为面对对象有三大特征:封装、继承、多态

概念:
封装:把不需要对显示的隐藏起来,对外只提供一个类似接口的东西,供使用者使用。使用者不需要了解具体怎么实现。例如一个空调,你只需要知道空调遥控器怎么用就好,空调具体怎么运转你就不需要了解了。这里,就是把空调的运转方式封装起来,提供了一个控制接口–遥控器。

//测试类
public class Text{
	private String name;//定义一个私有name字符串变量
	//下面的setNme,getName就是对name的封装
	//外部想要修改name就只能调用setName方法,同样想要获得name就得调用getName
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name=name;
	}
	public static void main(String[] args){
		Text text = new Text();//创建一个Text的对象
		name = "小明"; //这样会报错,因为name是私有的不能直接调用
		text.setName("小明");//给名字赋值
		String name = text.getName();//取到名字
	}//main结束
}//text类结束

继承:从另一个对象继承它的所有成员属性和成员方法,这个被继承的对象也称父类。实现了代码的重用。

//定义一个Text的子类
public class TextSon extends Text{
	public static void main(String[] args){
		TextSon son = new TextSon();
		son.setName("小马");
		System.out.println(son.getName());//
		
	}
} 

结果如下:TextSon在没有给出setName和getName的方法时用自身对象调用啦
在这里插入图片描述
多态:(interface)接口的多种不同的实现方式即为多态。接口的主要目的是为不相关的类提供通用的处理服务,我们可以想象一下比如鸟会飞,但是超人也会飞,通过飞这个接口,我们可以让鸟和超人,都实现这个接口,这就实现了系统的可维护性,可扩展性。

//接口是没有的成员方法是没有方法体的
//并且在接口里面的属性都是不可变的,即用默认用(public static final )修饰,一般不推荐在接口里定义属性
public interface IFly {
	public static final String  x="小明";//接口属性
	public abstract void fly();//接口方法
}//接口结束
//用TextSon测试
public class TextSon extends Text implements IFly {
		//重载fly抽象方法
		@Override
		public void fly() {
		// TODO Auto-generated method stub
		System.out.println("I can fly");
		}
	public static void main(String[] args){
		TextSon son = new TextSon();
		son.setName("小马");
		System.out.println(son.getName());//显示name
		son.fly();//调用重写fly方法
	}
} 

在这里插入图片描述
以上就是面对对象的三种特征。

三.面对对象编程该怎么实现

概念
面向对象是一种思想,他让我们在分析和解决问题时,把思维和重点转向现实中的客体中来,然后通过UML工具理清这些客体之间的联系,最后用面向对象的语言实现这种客体以及客体之间的联系。它分为面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)三个大的步骤。

1、首先是分析需求,先不要思考怎么用程序实现它,先分析需求中稳定不变的客体都是些什么,这些客体之间的关系是什么。

2、把第一步分析出来的需求,通过进一步扩充模型,变成可实现的、符合成本的、模块化的、低耦合高内聚的模型。

3、使用面向对象的实现模型
例子分析:
拿网吧来讲:网吧是一个抽象的主类没有具体的一个例子,我们学校外面的两个网吧,黑马网吧和斗鱼网吧就是两个子类了。

网吧具体有哪些属性呢:网吧名字、网吧地址、老板、网管、前台小姐姐(或者小哥哥)、网吧网速、网吧电脑配置,网费

网吧有哪些功能呢:网吧可以上网(必须的吧),可以点歌(也差不多必须的吧),可以买个泡面(也是必须的呀)、卫生间(必须的)、代取外卖(有的有),网费计算。
父类

//父类网吧
public abstract class InternetBar{
	private String barName;//网吧名字
	private String barAddress;//网吧地址
	private String barBoss;//老板
	private String barWebmaster;//网管
	private int barInternetSpeed;//网吧网速
	private String[] barComputerConfiguration;//网吧电脑配置
	private double barCost;//网吧网费
	//set,get方法省略太长啦
	//共有成员方法
	public abstract void canSurfInternet();//上网
	public abstract double  cost(int hour,int price);//计费方法,传入上网时间,与上网每小时单价
	public abstract void buyNoodle();//买泡面
	public abstract void toilet();//可以上厕所
}//父类结束

接口
点歌有的网吧还是没有就放在接口里面,还有取外卖

//点歌
public interface IOrderMusic {
	public abstract void orderMusic();
}
//取外卖
public interface ITake_Out {
	public abstract void take_Out();
}

子类1:
//可以点歌的网吧

public class BarSon1 extends InternetBar implements IOrderMusic{
	@Override//重写点歌
	public void orderMusic() {
		// TODO Auto-generated method stub
	}
	
	//继承所有父类方法
	@Override//重写上网方法
	public void canSurfInternet() {
		// TODO Auto-generated method stub
	}
	@Override//重写消费方法
	public double cost(int hour, int price) {
		// TODO Auto-generated method stub
		return 0;
	}
	@Override//重写买面方法
	public void buyNoodle() {
		// TODO Auto-generated method stub
	}
	@Override//重写厕所方法
	public void toilet() {
		// TODO Auto-generated method stub
	}
}//子类结束

子类2:
//可以取外卖

public class BarSon1 extends InternetBar implements ITake_Out{
	@Override//重写取外卖
	public void take_Out() {
		// TODO Auto-generated method stub
	}
	
	//继承所有父类方法
	@Override//重写上网方法
	public void canSurfInternet() {
		// TODO Auto-generated method stub
	}
	@Override//重写消费方法
	public double cost(int hour, int price) {
		// TODO Auto-generated method stub
		return 0;
	}
	@Override//重写买面方法
	public void buyNoodle() {
		// TODO Auto-generated method stub
	}
	@Override//重写厕所方法
	public void toilet() {
		// TODO Auto-generated method stub
	}
}//子类结束

到此分析结束。

学习总结: 需要由面向过程编程到面相对对象编程转换。

这里是引用:
当我们习惯了面向过程编程时,发现在程序过程中到处找不到需要面向对象的地方,最主要的原因,是思维没有转变。我们通常在拿到一个需求的时候,第一个反应就是如何实现这个需求,这是典型的面向过程的思维过程,而且很快可能就实现了它。而面向对象,面对的却是客体,第一步不是考虑如何实现需求,而是进行需求分析,就是根据需求找到其中的客体,再找到这些客体之间的联系。因此面向过程和面向对象的思维转变的关键点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值