面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。
如何判断一个语言是面向对象的编程语言呢,主要依据就看它有没有 封装,继承和多态
然而这可能是让所有编程初学者最先困惑的地方吧,“卧槽!?什么是面向对象,我还没有对象呢!”
这篇文章用我自己理解的方式,用最简单易懂的例子解释一下封装,继承和多态,方便初学者理解这些概念,也加深一下我对概念的理解和记忆,以防忘记。(反正我是看不懂教材里面写的无聊的概念)
首先解释一下封装。
程序为什么要封装呢,是因为做好的程序只需要向用户提供功能,而不需要展示细节。
第一使程序更加便捷,其次也增加了安全性和稳定性。
打个比方,比如说插排,我们把电路封装在插排里,只留几个入口给你插插销用就好了,用户不需要知道里面是什么样子的,
而且让你乱碰里面还容易被电死。
用代码来说明一下:
[sourcecode language="java"]
public class Demo {
public static void main(String [] args) {
People xiaoming = new People();
xiaoming.age = -500;
xiaoming.speak();
}
}
class People{
int age;
public void speak() {
System.out.println("我今年"+age+"岁了。");
}
}
[/sourcecode]
我们创建一个叫People 的类,这个类只有一个属性就是年龄age,还有一个说出自己年龄的方法speak。
然后我们创建一个叫xiaoming的对象,给xiaoming年龄赋值负的500
程序编译执行是没有问题的,但是人类年龄是不可能有负数的,为了防止用户输入非法数据,所以我们要把这个属性隐藏起来
然后只给用户提供一个修改数据的方法就可以了
那就是private,私有的值只能在本类里面使用,这样数据就隐藏起来了,那我们怎么给对象赋值呢
java给我们提供了一种规范,那就是提供一个公共的public方法 getter和setter
(这里只是简单介绍一下封装的思想,封装的方法并不只局限于一种)
这个方法的好处就是,我们可以给赋值的操作加入条件,防止用户乱输入数据:
[sourcecode language="java"]
public class Demo {
public static void main(String[] args) {
People xiaoming = new People();
xiaoming.setAge(-500);
}
}
class People {
public int getAge() {
return age;
}
public void setAge(int age) {
if (this.age > 0 && this.age < 130) {
this.age = age;
System.out.println("我今年" + this.age + "岁了。");
} else {
System.out.println("请输入正确的人类年龄。");
}
}
}
[/sourcecode]
这样做还有一个好处就是,我们可以把数据设置成只读的,我们只提供getter方法的话,
用户只能访问事先设定好的值,而不能自己设定值。
[sourcecode language="java"]
public class Demo {
public static void main(String[] args) {
People xiaoming = new People();
System.out.println(xiaoming.getAge());
}
}
class People {
private int age = 50;
public int getAge() {
return age;
}
}
[/sourcecode]
这样输出的结果是50,而不能修改年龄的数据,只能访问。
*(纯手打,更新比较慢,有时间再写一下继承,并且写一下java和python对于继承的不同)
https://www.cnblogs.com/astropeak/p/7229508.html
One comment
还是看不懂怎么办啊 :cry: