1. 面向对象
是将功能封装进对象,强调了功能的对像。
面向对象是基于面向过程。是一种思想
符合人思考习惯的一种思想;由复杂变简单、由执行者变指挥者
eg:我要达到某种目的(结果) ,就寻找能帮我达到该结果的功能对象。
面向对象的三大特性 :
封装、继承、多态
1.2 概念
类 : 对现实世界中某类事物的描述,是抽象的,概念上的定义。
对象: 事物具体存在的个体。
解释:定义类,就是在描述事物,在定义属性和行为。描述事物其实就是在描述事物
的属性和行为。
属性对应是类中 变量, 行为对应的类中的 函数( ( 方法) )。属性和行为共同成为类中的成
员(成员变量和成员方法)。
成员变量和局部变量
作用范围:成员变量作用于整个类中。局部变量作用于函数(方法)中或者整个语句
中。
内存位置:成员变量存在于堆内存中。随着对象存在而存在,随着对象消失而消失。
局部变量存在于栈内存中。当方法被调用或语句被执行的时候存在;当方法调用完,
或者语句结束后,就自动释放内存。
初始值:成员变量有默认初始值。局部变量没有默认初始值,使用前必须赋值。
定义 位置:成员变量定义在类中,方法外;局部变量定义在方法内或者作为方法的形
式参数存在。
2 封装
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
public class Husband {
/*
* 对属性的封装
* 一个人的姓名、性别、年龄、妻子都是这个人的私有属性
*/
private String name ;
private String sex ;
private int age ;
private Wife wife;
/*
* setter()、getter()是该对象对外开发的接口
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
封装不是私有(private ) ,私有仅仅是封装的一种表现形式。
代码块:由{}括起来的代码。
分类:局部代码块(定义在方法中的代码块) 、构造代码块(定义在方法外的代码
块)
作用:
局部代码块:控制代码块内变量的生命周期和作用域(使用范围) ,从而提高效率。
构造 代码块 :把 所 有 构造方法 中 共同的内容定义在构造代码块 。
构造代码块 中 定义的是不同对象共性初始化内容。
构造代码块对象一建立就运行,而且优先于构造函数执行。
作用:给对象进行初始化。
this 关键字
this 代表 本类的 对象。代表所在函数所属对象的引用 。代表所在函数所属对象的引用。简单说,谁调用 this 所在
的方法,this 就代表谁。
this 应用:用于区分同名成员变量和局部变量。
当定义类中功能时, 该函数内部要用到调用该函数的对象时, 用 this 来表示这个对
象。但凡本类功能内部使用了了本类对象,都用 this 表示。
在构造函数间互相调用对象时,只能用 this(参数) ; (参数) ;并且 this(参数)只能定义
在构造函数的第一个语句。因为初始化动作要先执行。若初始化中还有初始化,先
执行更细节初始化,然后再执行自己的初始化。this(参数)不能用在一般函数中。
static 关键字
定义:static 修饰的成员是在类中的定义,属于共享数据,静态数据。
特点1 用于修饰成员
2 被static 修饰的成员被所有的对象共享
3 Static 优先于对象的纯在
4 Static 修饰的数据是共享数据,对象中的存储的是特有数据
5 Static 修饰的成员多一种调用方式。就是可以直接被类名所调用类名.静态成员、
成员变量与静态变量的不同。
1 两个变量的生命周期不同。
成员变量随着对象的创建而存在,随着对象的被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2 调用方式不同
成员变量只能被对象调用
静态变量可以对象调用,还可以被类名调用
3 数据存储的位置不同
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量的数据存储在方法去的共享数据区的静态去。也叫兑现的共享数据
静态 (方法和变量)的注意事项
1 静态方法只能访问静态成员,(非静态既可以访问静态,又可以访问非静态)
2 静态方法中不可以使用this 或者super关键字
3 主函数是静态的
继承
在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承
“`
class Person {
public Person() {
}
}
class Man extends Person {
public Man() {
}
}
“`1.子类继承父类的成员变量
当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:
1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
2.子类继承父类的方法
同样地,子类也并不是完全继承父类的所有方法。
1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
多态
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
多态出现的缘由:java的引用变量有两种类型:一个是编译时的类型,一个是运行时类型。
编译时类项:声明该变量时使用的类型决定。
运行时类项:实际赋给该变量的对象决定
如果编译时和运行时类项不一样就会出现所谓的多态(polymorphism)。
多态:相同类项的变量执行同一个方法时,呈现出不同的行为特征这就是多态。
eg:
class animal{
eat(){
system.out.print(“吃”)
}
}
class dog{
eat(){
system.out.print(“啃骨头”)
}
}
public class duotai{
public static void main(string arg[]){
animal a = new dag();
a.eat()
}
}
运行结果为 : 啃骨头
一句话 编译看左边 ,运行看右边