重载(Overloading):
方法名称相同,参数的类型或个数不同。
对权限没有要求
发生在一个类中
重写(Overriding):
方法名称、参数类型、返回值类型全部相同。
被重写的方法不能拥有比父类更加严格的权限。
发生在继承中
java中的修饰符分类:
权限修饰符: private, default, protected, public
状态修饰符: static, final
抽象修饰符: abstract
public class Cat {
// ...
}
private boolean myCat;
static final double days = 9.5;
protected static final int BOXWIDTH = 42;
public static void main(String[] arguments) {
// 方法体
}
权限修饰符:
-
private:
如果实体使用private修饰符声明,那么实体将只能由定义实体的类中的包含的代码访问。它的访问权限仅限于类的内部,是一种封装的体现。这样,就不能从类的外边直接访问他们,我们提供set和get方法,保证类中数据域的安全。
-
default:
默认修饰符,什么都不加,实际上它限制的范围就是一个包内可以访问。如果不在一个包内,即使继承关系任然是不能访问的。它是针对本包访问而设计的,任何处于本包下的类,接口,异常等,都可以互相访问,即使是父类没有用protected修饰的成员也可以
-
protected:
经常需要允许子类访问定义在父类中的数据和方法,但是不允许非子类访问这些数据和方法,这种情况下就可以使用protected,它允许任何包中的子类访问父类。 -
public:
具有最大的访问权限,可以访问任何一个CLASSPATH下的类,接口、异常等。它往往对于对外的情况,也就是对象或类对外的一种接口形式。
状态修饰符:(static, final)
- static:
static修饰符
static的主要作用在于创建独立于具体对象的域变量或者方法。
语法格式:
修饰变量:static 数据类型 变量名
##修饰方法:【访问权限修饰符】 static 方法返回值 方法名(参数列表)
特点
static可以修饰变量,方法被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。
在类被加载的时候,就会去加载被static修饰的部分。被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。
static静态变量
static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的
而不是属于是对象,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。
静态变量与非静态变量的区别
静态变量可以直接使用类名调用。
静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化。
静态变量一旦变化,所有的实例的静态变量值都会变化。
非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
非静态方法可以调用静态变量、静态方法和非静态变量、非静态方法。
static静态方法
被static修饰的方法也叫做静态方法,因为对于静态方法来说是不属于任何实例对象的
那么就是说在静态方法内部是不能使用this的。
由于这个特性,在静态方法中不能访问类的非静态变量和非静态方法,
因为非静态方法/变量都是须依赖具体的对象才能够被调用。
在静态方法中不能访问非静态方法和非静态变量,
但是在非静态方法中是可以访问静态方法/静态变量。
- final修饰符
final 修饰符
final 关键字可以用于修饰类,方法和变量
1、final关键字通常与static修饰符一起使用来创建类常量
2、 final 修饰成员变量
必须要赋初始值,而且是只能初始化一次。
被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。
如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,
但是这个引用所指向的对象里面的内容还是可以改变的。
3、final 关键字修饰方法时,则该方法不能被重写
一个类的private方法会隐式的被指定为final方法。
如果父类中有final修饰的方法,那么子类不能去重写。
4、final 关键字修饰类时,该类不能被继承
被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。
final类中的成员方法都会被隐式的指定为final方法。
抽象修饰符:abstract:
用abstract关键字来修饰该类[抽象类],用abstract来修饰该方法[抽象方法]。
抽象类:
抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。
定义成抽象类的目的,就是为了在子类中实现抽象类。
抽象类不能被实例化。因为抽象类中方法未具体化,除此之外,类的其它功能依然存在,
成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
抽象类中不一定要包含abstract方法。也就是抽象中可以没有abstract方法。
抽象方法:
用abstract来修饰该的抽象方法只包含一个方法名,不能有方法主体。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
一旦类中包含了abstract方法,那类该类必须声明为abstract类。