面向对象特征

一. 什么是面向对象(OOP)

我理解的面向对象,是一种编程思想,代码的书写格式,面向对象编程思想指导我们写出复用性更高,更简洁的代码.

举个例子:把大象装进冰箱

面向过程:总共分三个过程,
-第一个过程:把冰箱门打开 (关着门的冰箱) 返回值是开着门的冰箱
-第二个过程:把大象装进去 (开着门的冰箱) 返回值是开着门,装着大象的冰箱
-第三个过程:把冰箱门关上 (开着门,装着大象的冰箱) 返回值是关着门,装着大象的冰箱

面向过程就是什么事我们都要亲力亲为,我们要自己打开冰箱,装大象,关门.

面向对象: 总共分三个动作,(每个动作都有一个对象去执行)
第一个动作: 冰箱.开门()
第二个动作: 冰箱.装进(大象)
第三个动作: 冰箱.关门()
或者是链式调用 冰箱.开门().装进(大象).关门()

面向对象就是我们创建-(new)一个对象,给对象添加上一些属性和功能(方法),之后操作这个对象来完成把大象装进冰箱的效果.

说到这里你可能有一点不理解,创建对象好麻烦,不如面向过程来的直接
那我们继续看下一个例子

话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片。
眼看就要灭了东吴,统一天下,曹操大悦,于是大宴众文武。在酒席间,曹操诗性大发,不觉吟道:“喝酒唱歌,人生真爽…”。
众文武齐呼:”丞相好诗!“于是命印刷工匠刻版印刷,以便流传天下。

版样给曹操一看,曹操感觉不妥,说道”喝与唱,此话过俗,应改为‘对酒当歌’较好!“,于是命工匠重新雕刻。
那时候,还没发明活字印刷术,如果样板要改,只能重头雕刻。工匠眼看连夜刻版之工,彻底白费,心中叫苦不迭。只得照办。

版样再次出来请曹操过目,曹操细细一品,觉得还是不好,说”人生真爽太过直接,应该改问语才够意境,因此应改为‘对酒当歌,人生几何?’“,于是…

在活字印刷术还没出现之前,如果版样有改动,只能重新雕刻。
而且在印刷完成后,这个样板就失去了它的价值,如果需要其他样板只能重新雕刻。

而活字印刷术的出现就大大改善了印刷技术。如上例”喝酒唱歌,人生真爽“,如果用活字印刷,只需要改四个字就可,其余工作都未白做。岂不快哉!!

活字印刷也反应了OOP。
当要改动时,只需要改要改的地方,此为 可维护;
当这些字用完后,并非就完全没有价值了,它完全可以在后来的印刷中重复使用,此乃 可复用;
次诗若要加字,只需另刻字加入即可,这就是 可扩展;
字的排列可以横排,也可以竖排,此是 灵活性好。

现在我想你对面向对象应该有大致的了解了,那我们接着说面向对象的三个特征

二. 封装(private)

什么是封装?
封装是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,
而是通过该类提供的方法来实现对隐藏信息的操作和访问.

简单的来说就是 合理隐藏,合理暴露

那该怎么封装呢?
这时就需要使用到一个java关键字 private(翻译过来就是私有的),来修饰我们需要封装的属性,方法

什么是java关键字呢?
关键字也称为保留字,是指java语言中规定了 特定含义的标示符。对于保留字,用户只能按照系统规定的方式使用,不能自行定义。

	public class PrivateTest {
	    // 封装也就是将属性私有化,同时为每个属性创建取值getter和赋值setter方法
	    private String name;
	    private int age;
	
	    public PrivateTest() {
	    }
	
	    public PrivateTest(String name, int age) {
	        this.name = name;
	        this.age = age;
	    }
	
	    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 class Demo01 {
	    public static void main(String[] args) {
	        PrivateTest privateTest = new PrivateTest();
	        //privateTest.name;//'name' has private access in 'PrivateTest' 翻译过来就是访问权限是私有的
	        /*这时我们需要通过 PrivateTest类中的get和set方法来操作类中的属性*/
	
	        privateTest.setName("张三"); //设置属性
	        System.out.println(privateTest.getName()); //获取属性
	
	        privateTest.setAge(21); //设置属性
	        System.out.println(privateTest.getAge()); //获取属性
	    }
	}

那么问题又来了,我们为什么要使用封装?这样看起来繁琐,直接操作属性不是更加的方便快捷吗?
我们为什么要使用封装?
可以提高类中属性的安全性,不让外部程序随意修改调用(只能通过规定的方法访问数据),并且对所赋予的值加以判断.

封装的好处有哪些?

  1. 提高安全性
  2. 提高复用性
  3. 隐藏了实现细节
  4. 方便加入控制语句
  5. 方便修改实现

二. 继承(extends)

什么是继承?
子类继承父类所拥有的属性和方法(私有方法除外)

继承的好处?
代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性(子类也可以有自己的方法和属性,这样使得子类的功能更加的强大)
提高代码的复用性
提高代码的扩展性
使类与类之间有了关系(多态的前提)

继承的缺点?
增强了耦合性(当父类的常量,变量,方法被修改时,需要考虑子类的修改,导致大量代码被重构)
继承是入侵性的(只要继承,就必须拥有父类的所有属性和方法)
降低了代码的灵活性

三. 多态

什么是多态?
父类的引用指向子类对象
接口的多种不同实现方式即为多态

多态的作用?
提高复用性,(应用程序不必为每个派生类编写功能调用,只需要对抽象基类进行处理即可)
提高维护性(向下兼容)
提高扩展性(增加新的子类不影响已存在类的多态性,继承性,以及其他特性的运行和操作)
消除类型之间的耦合关系
简化代码
派生类的功能可以被基类的方法或引用调用,这是向下兼容,可以提高扩充性和可维护性(多态的真正作用)

多态可以用在什么地方?
可以用在方法参数中和方法的返回类型中

多态的前提?
要有实现或继承
要有重写
父类的引用指向子类对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香辣奥利奥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值