目录
一、面向对象描述
面向对象其实是现实世界模型的自然延伸,可以将现实世界中的任何实体都看做是对象。面向对象编程语言规定了如下特征:
1、封装:保护类内部不被破坏。
2、继承:在原来的基础上进行扩充。
3、多态:在一个指定范围之内进行概念转换。
面向对象开发三个过程:OOA(面向对象分析) 、OOD(面向对象设计) 、OOP(面向对象编程)
二、类和对象基本概念
类表示的是一个共性的产物,类中定义属性(变量)和行为(方法)。
对象表示独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同的对象。
三、类的定义和使用
3.1、类的认识
类是对一个对象的描述。主要描述对象有哪些属性和行为(方法)。
例如:人可以看做一个对象,人的属性有姓名、年龄等,行为(方法):说话、走路等。
3.2、类的定义
在 Java 中定义中,使用 class 完成 ,语法如下:
class 类名{
// 属性 (变量)
// 行为 (方法)
}
class 为定义关键字,类名定义的名称,{} 为类的主体。
类中包含的内容称为类的成员,属性主要描述类的,称之为类的成员属性或者成员变量。方法说明类具有哪些功能,称类的成员方法。
示例
public class Person { // 类名称采用驼峰命名
String name; // 姓名
int age; // 年龄
public void talk() {
System.out.println("我是: "+ name +" 年龄:"+age);
}
}
在 Java 语言将人这个对象定义完成,经过 javac 编译之后形成 .class 文件,在 JVM 的环境下计算机就可以识别了。
类定义完成后,还无法直接使用,需要依靠对象,由于类属于引用数据类型,所以对象产生格式如下:
格式一:声明并实例化对象
类名称 对象名称 = new 类名称();
格式二:先声明,后实例化对象
类名称 对象名称 = null;
对象名称 = new 类名称();
引用数据类型和基本数据类型最大不同在于:引用数据类型需要内存的分配和使用。所以关键字 new 的主要功能就是分配内存空间,也就是说,只要是引用数据类型,可以使用 new 关键字来分配内存空间。
四、对象的使用
实例化对象后,可以如下操作实例化对象:
对象名称.属性; 表示调用类的属性
对象名称.方法名(); 表示调用类的方法
示例
class Person { // 类名称采用驼峰命名
String name; // 姓名
int age; // 年龄
public void talk() {
System.out.println("我是:" + name + " 年龄:" + age);
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person(); // 实例化对象
person.name = "张三"; //操作属性
person.age = 18;
person.talk(); // 调用类talk方法
}
}
控制台输出
我是:张三 年龄:18
五、类的三大特性
5.1、 封装
封装字面可以理解包装的意思,专业点就是隐藏,是指抽象数据类型将数据和基于数据操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能隐藏内部细节,只保留一些对外接口使之与外部发生联系。系统其它对象只能通过已经授权操作与这个封装的对象进行交流与交互。也就是说用户无需知道这个封装对象内部细节,但可以通过该对象对外提供接口来访问对象。
对于封装而言,封装的自己的属性和方法,无需依赖其它对象就可以完成自己的操作。使用封装有如下优点:
1、良好的封装能够解耦。
2、类内部结构可以自由修改。
3、可以对内部成员精确控制。
4、隐藏信息,实现细节。
5.2、 继承
继承是使用已存在类作为基础建立新类的技术。新类定义可以增加新的属性和功能,可以使用父类的属性和功能,但不能选择性继承父类某个属性或者功能。
继承可以非常方便复用以前的代码,能够大大提高开发效率。
继承描述的是 “ is a ” 的关系,如果两个对象 A 和 B,若可以描述 A 是 B ,则可以表示 A 继承 B,B是被继承者称为父类、超类或者基类,A是继承者称为子类、派生类。
通俗点讲,被继承者是继承者对它的扩充。例如猫有抓老鼠、爬树等特性,其他动物没有这些特性。同时在继承关系中,继承者完全可以替代被继承者,反之不可以,例如我们可以说,猫是动物,但不能说动物是猫这个道理,在 Java 术语中这个称 “ 向上转型”。
继承有如下优点:
1、子类拥有父类非 private 的属性和方法。
2、子类拥有自己属性和方法,即子类对父类的扩充。
3、子类可以用自己的方式去实现父类的方法。
5.3、 多态
多态就是程序中定义的引用变量所指向的具体类型和通过引用变量发出方法调用在编程时并不确定,即一个引用变量到底会指向那个类的实例对象,该引用变量发出的方法到底是那个类的实现方法,必须是由程序运行时才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
总结如下:指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)
对于面向对象而言,多态分为编译时多态和运行时多态。其中编辑时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。
Java 实现多态三个必要条件:继承、重写、向上转型
1、继承:多态中必须存在继承关系的父类和子类。
2、重写:子类对父类某些方法重新定义,在时调时这些方法时会调用子类重新定义方法
3、向上转型:在多态中,需要将子类的引用赋给父类的对象,只有这样才具备调用父类的方法和子类的方法。