面向对象编程的本质就是:以类的方式组织代码,以对象的形式组织(封装)数据
抽象:
三大特性: 封装、继承、多态
从认识论角度考虑是:先有对象后有类。对象,是具体的事物。类,是抽象的,是对对像的抽象
从代码运行角度考虑是:先有类后有对象。类是对象的模板,对象是类的实例.
类与对象的关系类是一种抽象的数据类型,它是对某一个事物整体描述/定义,但是并不能代表某一个具体的事物。
对象是抽象概念的具体实例
对象在类的里面。
同一个类可以有不同的对象,如:
Student xiaoming = new Student(); Student xiaohong = new Student();创建与初始化对象
使用 new 关键词创建对象
使用new关键词创建的时候,除了分配内存空间之外,还会给 创建好的对象 进行默认的初始化以及 对类中构造器的调用。
类中的构造器也称为 构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
-
必须和类的名字相同
-
必须没有返回类型,也不能写void
构造器必须掌握
构造器1.和类名相同
2.没有返回值
作用:
-
new 本质在调用构造方法
-
初始化对象的值
注意点:
-
定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造(就是必须再定义一个无参构造,否者 new 时必须带参数。系统默认的无参构造已经不存在了)
-
this. 是指向类自己本身
1.类与对象 类是一个 抽象的 模板,对象是一个 具体的 实例。 2.方法 定义、调用! 3.对应的引用 引用类型 和 基本类型(8种) 对象是通过引用来操作的: 栈---->堆 4.属性:字段Field 成员变量 默认初始化: 数字: 0 0.0 char: u0000 boolean: false 引用:null 修饰符属性类型 属性名 = 属性值 5.对象的创建和使用 必须使用 new 关键字创造对象,构造器 如:Person yangtao = new Person(); 对象的属性 yangtao.name 对象的方法 yangtao.sleep() 6.类: 静态的属性 属性 动态的行为 方法 类就是由属性和方法组成
java的三大特征:封装、继承、多态
修饰符:
public:公共protected:受保护default:默认private私有
封装该露的露,该藏的藏
我们程序设计要追求 “高内聚,低耦合”。
高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉。
低耦合:仅暴露少量的方法给外部使用。
封装(数据的隐藏)
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
属性私有,get/set
封装的意义
-
提高程序的安全性,保护数据
-
隐藏代码的实现细节。private: 私有
-
同一接口
-
系统可维护增加了
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
extends的意思是“扩展”。子类是分类的扩展。
JAVA中类只有单继承,没有多继承!一个子类只能有一个父类,但一个父类可以有多个子类。
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有 依赖、组合、聚合等。
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字 extends来表示。
子类和父类之间,从意义上讲应该具有“is a" 的关系
私有的东西无法被继承
-
object类
在Java中,所有的类,都默认直接或者间接继承Object类
-
super
public Student() { //隐藏代码:调用了父类的无参构造 //调用父类的构造器,必须要在子类构造器的第一行 super(); System.out.println("子类无参执行"); }注意点:
-
super调用父类的构造方法,必须在构造方法的第一个
-
super必须只能出现在子类的方法或者构造方法中!
-
super 和 this 不能同时调用构造方法!
与 this 的对比:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件才可以使用
构造方法
this():本类的构造
super():父类的构造
-
-
方法重写:重点--->多态
需要有继承关系,子类重写父类的方法!
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但不可以缩小。 public->protected->default->private
-
抛出的异常:范围可以被缩小,但不能扩大。
-
重写,子类的方法和父类必须一致:方法体不同!
为什么要重写:
-
父类的功能,子类不一定需要,或者不一定满足!
与 重载 的比较:
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法的重载的规则:
-
方法名称必须相同
-
参数列表必须不同(个数不同、或类型不同、参数排序顺序不同等)
-
方法的返回类型可以相同也可以不相同
-
仅仅返回类型不同,不足以成为方法的重载。
实现理论:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
多态即同一方法可以根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
多态存在的条件:
-
有继承关系
-
子类重写父类方法
-
父类引用指向子类对象
主要事项:
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系 类型转换异常! ClassCastException!
-
存在条件:1.继承关系,2. 方法需要重写,3.父类引用指向子类对象( Father f1 = new Son(); )!
方法不能被重:
-
static 方法,它属于类,不属于实例
-
final 常量;
-
private 方法;



