经过半个多月的学习,初步了解了Java面向对象的知识。面向对象的三大基本特征:封装、继承、多态。
封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构从而保护数据。
继承是为了重用父类代码,同时为实现多态性做准备。
多态性是发送消息给某个对象,让该对象自行决定响应何种行为。
概念
面向过程是一种自上而下的程序设计方法,主要思路专注于算法的实现
过程式的特征是以函数为中心,用函数作为划分程序的基本单位;数据在过程式设计中处于从属的位置
过程式设计的优点是易于理解和掌握,这种逐步细化问题的设计方法与大多数人的思维方式比较接近
面向对象是一种自下而上的程序设计方法,以数据为中心,类是表现数据的单位,是划分程序的基本单位
面向对象设计是自下而上的特性,允许开发者从问题的局部开始,在开发过程中逐步加深对系统的理解。需求变化会作用到系统开发本身,形成一种螺旋式的开发方式
面向对象设计中,类封装了数据,而类的成员函数作为其对外的接口,抽象地描述类,用类将数据和操作这些数据的函数放在一起,这就是面向对象设计方法的本质
对象
对象是要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象是一个客观存在的、唯一的实体,是一个类的动态实例,拥有自己的标识、数据与行为。
对象的状态和行为
对象具有状态,一个对象用数据值来描述它的状态
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中
对象的要素
属性:用于描述对象静态特性(结构特性)的一个数据项,描述一个人可用姓名、性别、身份证号等属性
方法:用于描述对象动态特性的一个操作系列
类
类是具有共同属性和行为的对象的抽象,具有相同特性(数据元素)和行为(功能)的对象的抽象就是类
对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象
类实际上就是一种数据类型
封装
在面向对象程式设计方法中,封装Encapsulation是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
封装最主要的功能在于能修改自己的实现代码,而不用修改那些调用代码的程序片段·适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
class Student{
//成员属性,私有成员
private int age;
//成员方法
public int getage(){
return this.sex;
}
//没有提供set方法,不允许修改age
}
封装的好处:
良好的封装能够减少耦合,类的内部结构可以自由修改,可以成员进行更精准的控制,隐藏信息,实现细节。
访问的控制限定词:private,protected,public
当前类内 | 同包 | 子类 | 到处 | |
private | T | |||
无范围限定词 | T | T | ||
protected | T | T | T | |
public | T | T | T | T |
继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
继承的优点
将所有子类的共同属性放入父类,实现代码共享,避免重复,提高开发效率
继承的缺陷
父类发生变化,子类就必须改变
继承破坏了封装,对于父类而言,它的实现细节对于子类来说是透明的
继承是一种强耦合关系
关键字package
包是类或接口的容器,是一个用于避免命名冲突的名空间,是一个逻辑命名的概念,与具体的物理位置无关
包是类的组织方式,提供名空间和访问控制
包的使用方法:
import java.util.Date;//使用包
public class A{
public static void main(String[] args){
Date now = new Date(); //使用类的简称Date
}
}
public class A{
public static void main(String[] args){
java.util.Date now = new java.util.Date();//使用包的全称,不需要import
}
}
多态
通俗的讲,就是同一个东西表现出多种状态,在面向对象的描述中就是同一个函数接口,实现多种不同的表现方式。
使用方法:
public class Test {
public static void main(String[] args) {
parent ss = new son();
ss.pp();
}
}
class parent{
protected Long id = 100L;
public void pp() {
System.out.println(this);//this指代当前对象,指new什么就是什么
System.out.println(id);
this.dd(); //this. 用于调用当前类对象的其它方法
}
public void dd() {
System.out.println("parent--666");
}
}
class son extends parent {
protected String id = "abc";
public void pp() {
System.out.println(id);
// this.dd(); //this. 引用dd方法
super.pp(); //super. 引用父类中pp方法
// System.out.println(super.id);
}
}