面向对象
面向对象简介:
面向过程编程少了可重复用性设计
三大特征
- 封装性:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐蔽。简而言之就是:内部操作对外部而言不可见(保护性)
- 继承性:首先继承是一种能力它可以使用现有类的所有的功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。(必须满足is-a原则,赋用)
- 多态性:一个类实例的想同方法在不能情形有不能的表现形式。多态机制是具有不同内部结构的对象可以共享相同的外部接口。(利用多态可以得到良好的设计)
面向对象名词扩展 - OOA:面向对象分析
- OOD:面向对象设计
- OOP:面向对象编程
- 面向对象最大的特征:可以对现实生活进行抽象。
类与对象的定义与使用
类指的是共性的概念(人类),而对象是类的一个具体的可以使用的事物(某个人)。
首先产生类(类是产生对象的蓝图),而后产生对象。对象所有的行为一定在类中进行了完整的定义。(属性和行为一致)
类的组成:
属性:描述对象的具体特点
方法:操作的行为
语法:
class 类名称{
属性1;
属性2;
属性n……;
方法1(){}
方法2(){}
方法(){}
}
class Person{
public String name;
public int age;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String getPersonInfo(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}
类中定义的普通属性与方法不在由主类直接调用,而是通过该类的对象的调用。
产生对象的语法:
类名称 对象名称=new 类名称()
Person p1 = new Person();
Person p2 = new Person("Steven",25);
对象内存分析:
堆内存:方法的局部变量,方法形参,引用
堆内存(所有方法共享内存):数组对象、所有类的对象
当看见关键字new,一定在堆内存上开辟了新的空间
对象的引用传递:多个栈内存指向同一个堆内存
对象的空指针问题:所有引用数据变量必须先赋值后使用,否则会抛出NullPointerException(运行时异常)
封装和构造方法
private实现封装
若类中属性直接暴露给对象操作,存在不安全(由于对象可以直接操作类中属性,无法限制属性是否正常设置)
使用private实现堆属性封装
修饰属性或方法,表示该属性和方法只能在本类中使用,其他类无法直接使用private封装的属性或方法。
defalut权限
class Person{
String name
}
Person类与name属性都是default权限(包访问权限,在同一个 源文件中可以访问)
使用方法
若private封装的属性要被外部访问,需要提供setter/getter方法
setter方法用于设置属性值
getter方法用于取得属性值
类的设计原则
- 编写类时,所有属性必须被private封装
- 属性要被外部访问,必须定义相应的getter和setter方法
类的构造方法
定义:构造方法是在使用关键字new实例化新的对象时调用的方法
person per = new person
类名称 对象引用 堆上开辟新空间 构造方法
构造方法特点 - 构造方法名称必须与类名称相同
- 没有返回值类型说明
- 每个类至少存在一个构造方法无参构造(没有明确定义,则系统自动生成一个无参构造)
构造方法作用
为类中属性初始化,避免多次使用setter调用
方法重载:仅限于参数个数不同
this关键字
this表示构造方法
this(方法参数);
在构造方法首行使用this()表示调用本类的构造方法
this调用构造方法必须在构造方法首行
this调用构造方法不能成环
this表示本类普通方法
this.方法名称(方法参数)
若在本类中调用本类方法,一般将this(尤其是在有继承的情况,使用this可以明确是本类方法)
this表示当前对象
当前调用的属性和方法是通过那个对象调用的,this就指代他。
static关键字
修饰本类属性—成为静态属性(类属性),所有对象共享此属性值
非static属性成为成员变量或对象属性,每个对象都有此属性且值都一样
要描述国家着中共享属性,可以使用static修饰属性静态属性一般同过类名直接调用,所有该类对象共享此属性值。
修饰本类方法
使用static修饰方法,称为类方法,直接通过类名称调用,与对象实例化无关。
静态方法常见于工具方法。
eg:java.util.Arrays.sort();
System.arraycopy();
静态方法不能访问类中普通属性。 静态无对象
静态方法可以访问类中静态属性。
普通方法可以访问类中静态属性。
修饰内部类
没有外部类直接创建