面向对象
面向对象的程序设计:
1、所有的东西都是对象。将对象看成一种新型的变量;它保存数据,但可以对自身操作。
2、程序就是一大堆的对象的组合;通过消息的传递,各对象知道自己该干什么。而消息传递可以想象成一个调用请求,它调用的是从属于目标对象的一个子例程或方法。
3、每个对象都有自己的存储空间,可以容纳其他对象。所以尽管对象的概念非常简单,但是程序中可以达到任意复杂程度。
4、每个对象都有一个类型。语法上规定,每个对象都是某个“类”的实例。“Class”类就是类型“Type”类型的同义词。一个类最重要的特征就是“能将什么消息发给他”。
5、同一类的所有的对象都能接受相同的消息。
什么是面向对象,通俗来说就是看待事物的角度,将万事万物都看成对象。它具有以下几个特点:抽象、封装、继承、多态。
首先来说一下抽象,如果要我举个例子来说大概是这样,比如一群学生,我们来抽取以下它们共同的特质,比如一个学生起码要有自己的学号是吧,有自己的学校,自己的专业,他还要有自己的姓名、性别、身份证号等。学生能干哪些事?首先可以自报家门,告诉别人自己的信息。还可以上课,可以读书,可以运动...那么将他们的信息或者属性标注一个类型,每种行为都写入一个方法中。这个就对事物抽象的过程。
封装:首先强调封装是出于安全的考虑,尽可能的隐藏数据内部的具体细节,所以推荐写代码的时候一定要注意这点。具体的做法就是”类“将自己的属性私有化。然后提供共有的get(获取)和set(改变)方法。
继承:就我个人而言它非常好的体现了代码重用的理念。当然想要设计能够重复使用的代码是比较考察经验和洞察力的。它是指 在已有的类的基础上,除了实现原有的大致的功能还能有自己的属性或者方法。那么首先它必须要有一个原始类,称为基类或者父类。并以此为基础增加功能。使用extends关键来实现继承。
多态:这是我之前没有理解好的一个概念。
1、要有继承
2、重写父类的方法,子类有不同的行为方式。
3、父类的引用指向子类的对象。
多态的好处:可替换,扩充,可以新增子类而不必修改原有的类,接口化,所有子类实现同一个接口。然后就是非常的灵活。
例子:
* 测试类,为了体现类的特点
* @author lenovo
*
*/
public class Test {
public static void main(String[] args) {
Person person = new Person();//创建了一个person对象
Person person2 ;//声明这么一个变量,只是一个句柄或引用
person2 = new Student();//将子类Student的对象指向这个引用。
Person person3 = new Teacher();
//调用各自的showSelf方法。
person.showSelf();
person2.showSelf();
person3.showSelf();
}
}
我是Person!
我是学生!学号:null
我是老师!
结果:体现了多态
封装:首先强调封装是出于安全的考虑,尽可能的隐藏数据内部的具体细节,所以推荐写代码的时候一定要注意这点。具体的做法就是”类“将自己的属性私有化。然后提供共有的get(获取)和set(改变)方法。
继承:就我个人而言它非常好的体现了代码重用的理念。当然想要设计能够重复使用的代码是比较考察经验和洞察力的。它是指 在已有的类的基础上,除了实现原有的大致的功能还能有自己的属性或者方法。那么首先它必须要有一个原始类,称为基类或者父类。并以此为基础增加功能。使用extends关键来实现继承。
多态:这是我之前没有理解好的一个概念。
概念:是指不同类的对象对同一消息做出响应。也就是对同一个消息可以根据不同的对象做出不一样的行为方式。
实现:动态绑定。执行期间根据对象的实际类型调用相应的方法。
作用:降低耦合度。同过父类的引用,在运行期指明子类的对象动态的绑定,来做出响应。多态的必要条件:
1、要有继承
2、重写父类的方法,子类有不同的行为方式。
3、父类的引用指向子类的对象。
多态的好处:可替换,扩充,可以新增子类而不必修改原有的类,接口化,所有子类实现同一个接口。然后就是非常的灵活。
例子:
/**
* Person类 是所有的学生和老师的基类
* @author lenovo
*
*/
public class Person {
private String name;//
public void showSelf(){
System.out.println("我是Person!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 学生类,有自己的属性id,方法showSelf()
* 首先Class代表了抽象,属性私有,提供get和set方法体现了封装,extends体现继承
* @author lenovo
*
*/
public class Student extends Person {
private String id;//学号
@Override
public void showSelf(){
System.out.println("我是学生!学号:"+id);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
/**
* 老师类,自己独有的属性job,同时也有一个showSelf()
* @author lenovo
*
*/
public class Teacher extends Person {
private String Job;//工作
public void showSelf(){
System.out.println("我是老师!");
}
public String getJob() {
return Job;
}
public void setJob(String job) {
Job = job;
}
}
/**
* 测试类,为了体现类的特点
* @author lenovo
*
*/
public class Test {
public static void main(String[] args) {
Person person = new Person();//创建了一个person对象
Person person2 ;//声明这么一个变量,只是一个句柄或引用
person2 = new Student();//将子类Student的对象指向这个引用。
Person person3 = new Teacher();
//调用各自的showSelf方法。
person.showSelf();
person2.showSelf();
person3.showSelf();
}
}
我是Person!
我是学生!学号:null
我是老师!
结果:体现了多态