一. 封装
1. 概述:
• 面向对象的三大特征之一(封装,继承,多态)
•意义:对象名直接访问成员变量的方式来对属性赋值会存在数据安全隐患,因而要对属性进行封装(不让外界直接访问成员变量)
•好处:提高代码安全性(方法控制成员变量)
提高代码复用性(代码用方法封装)
•方法:
(1)使用provate关键字修饰符修饰成员变量
(2)提供公共的访问方法
:
给成员变量赋值
的公共方法(set
方法);
获取
成员变量值的公共方法(get
方法)。
2.访问权限
•4种访问权限:
public(共有的)>protected(受保护的)>default(不加任何访问权限修饰符,即默认的)>private(私有的)
•能修饰类的访问权限只有public和默认的
当类被public修饰,则该公共类可被任何包中类访问;
当类被默认的修饰,则该类被该包中的任意类访问。
•4种访问权限修饰符均能修饰类的成员变量和成员方法。
同一个类 | 同一个包 | 不同包中的子类 | 不同包中的非子类 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default | √ | √ | ||
private | √ |
•如果一个JAVA源文件里有public类,则源文件名必须与public类的类名相同
3.this 关键字
•this代表了当前对象的一个引用,通过这个名字可以顺利地访问对象、修改对象的数据成员、调用对象的方法。
•this对象是JAVA语言实现封装的一种机制。
•作用:(1)区分同名的局部变量和全局变量
格式:this.全局变量
(2)区分同名的成员变量和形参
格式:this.成员变量
(3)访问当前对象的成员方法
格式:this.成员方法(参数)
(4)当构造方法重载时,用来调用同类的其他构造方法
格式:this(参数) 放在方法体第1行
4.静态修饰符static
•static修饰初始化块
初始化块是类中可以出现的又一重要成员。初始化块没有名称和标识,因此无法通过类和对象来调用,只在创建对象时自动执行并且在执行构造方法之前执行。
初始化块语法格式:
【修饰符】{
//初始化代码(包含任何可执行语句)
}
一个类里可以有多个初始化块,相同类型的初始化快间,先执行被定义的那个。
初始化块的修饰符只能是static,被static修饰的初始化块称为静态初始化块。
初始化块的作用是对Java对象执行指定的初始化操作与构造方法的作用相似,但初始化块是一段固定的执行代码,没有返回值和参数值。
系统在内初始化阶段执行静态初始化块,因此静态初始化快总是比普通初始化块先执行,静态初始化快在类加载的时候执行,普通初始化块在创建对象调用构造方法之前执行。
系统在类初始化阶段执行静态初始化时,按照类的层次,先执行顶级类的静态初始化块,然后执行父类的静态初始化块,最后执行此类的静态初始化块。
•static修饰成员变量
若一个成员被声明为static,则它不在任何对象的内存区里,而在类的公共存储单元中。类的任何对象访问它时,存取到的都是相同的数值。
静态变量也称为类变量、类属性,非静态变量称为实例变量,实例属性,静态成员变量的初始化先于非静态成员的初始化。
静态变量可以使用访问权限修饰符。
静态数据成员的初始化可以由用户在定义时进行,也可以由静态初始化块来完成。
•static修饰成员方法
用关键字static修饰的方法称为类方法或静态方法。类方法体中只能访问类变量,而且类方法既可以通过对象来调用,也可以通过类名来调用。
在声明static的方法时的限制:
(1)仅能调用其他的static方法;
(2)只能访问static数据;
(3)不能以任何方式引用this或super。
二.继承
1.概念:
•继承是面向对象程序设计的又一重要特性,它允许创建分等级层次的类。
•继承是一种由已有类创建新类的机制。
•在Java语言中被继承的类称为基类或者父类,由继承形成的类称为派生类或者子类。
•子类继承了父类定义的变量和方法,且可以修改父类的属性、重写父类方法,添加自己特有的变量和方法。
•Java中规定一个父类可以同时拥有多个子类的一个子类,但一个子类只能有一个父类,即单重继承。Java允许多层继承,即子类还可以有他自己的子类。
2.类继承的实现:
类的继承是通过关键字extends来实现的
格式:
【访问权限】class 子类名 extends 父类名
若没有extends子句,则子类继承Object
3.继承成员变量和方法
(1)子类和父类在同一个包中:子类可继承父类中的public 、protected和default类型的成员变量和方法,不能继承private型的成员变量和方法;
(2)子类和父类不在同一个包:子类可继承父类的public、protected的成员变量和方法,不能继承default和protected的成员变量和方法;
(3)子类不能继承父类的构造方法。
4.子类的构造方法
- 子类的构造方法总是先调用父类的某个构造方法,用super实现调用
格式:super(参数)
- 子类调用父类构造方法的几种情况:
(1)父类中没有定义构造方法:系统自动为父类添加一个无参、方法体为空的构造方法,子类可不显示的调用、系统创建子类对象时自动调用;
(2)父类定义了无参数构造方法,同样可不显示;
(3)父类定义了有参数构造方法,子类构造方法中第一条语句必须使用super语句调用父类有参数构造方法
5.覆盖
覆盖是指子类拥有父类相同成员
覆盖的两种情况:
(1)成员变量的覆盖:子、父类成员变量同名,不管其类型是否相同,父类都会被覆盖
(2)成员方法的覆盖:子、父类成员方法在方法名、返回类型、参数个数以及类型方面都相同时,父类被子类覆盖
覆盖方法访问权限>所覆盖方法访问权限
子类若想使用父类中被隐藏的成员方法,必须使用关键字super
格式:super.数据成员
super.成员方法(参数)
6.关键字final
final可用于修饰类、变量和方法