1、访问控制符
用来修饰类成员(方法、构造器、成员变量)
修饰符 | 本类 | 本包 | 非本包下的子类 | 不同包、非子类 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default(默认) | √ | √ | ||
private(私有的) | √ |
注:
1)、访问控制修饰符可以用来修饰类
2)、修饰外部类,只能用public或默认(default)
3)、修饰内部类,都可以用
2、非访问修饰符
static,用来修饰类方法和类变量。
final,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract,用来创建抽象类和抽象方法。
synchronized和volatile主要用于线程的编程。
1、static
static变量是属于类的变量,存储在方法区中,而不再堆中,一个类的static变量只有“一份”,不随对象的创建而创建
静态变量:static修饰的成员变量
static只能修饰成员变量,不能修饰局部变量
普通成员变量是属于对象的,所以也把这些成员变量叫做实例变量
因为static变量是属于类,不是属于对象,所以不会随着对象的创建而改变,调用static变量,通过类名直接调用
静态方法:static修饰的方法
调用成员方法时,会传递一个隐式的参数(调用这个方法的对象),在成员方法中就存在了这个对象,用this表示,所以在一个类中,在成员方法中可以直接调用其他成员方法。
成员方法是属于对象的,要调用必须通过对象调用,调用static修饰的静态方法时,不会像此方法传递隐式的对象,所以在静态方法中,不可以使用this,而是通过类名直接调用方法
静态代码块:static修饰的代码块
静态代码块属于类,在类加载期间执行(在进入main方法之前),且只执行一次
静态代码块通常用来在软件中加载静态资源。静态资源:可以供多个对象共用的资源
注:
1)、成员变量的默认初始化会随着类的加载而执行,且只执行一次。
2)、如果要调用一个类的普通方法:需要先创建对象,在通过对象调用这个方法
3)、静态方法不能调用非静态方法,因为静态方法内部没有this、super
4)、非静态方法叫做实例方法,非静态的成员变量叫做实例变量
2、final:不可变的
final修饰变量:
final int a = 1; //a的值不可变,相当于一个静态常量
final修饰方法:
public final void test(){} //方法不可变,也就是方法不能被重写
final修饰类:
public final class 类名{} //类不能被改变,就是说类不能被继承
注:
static final 修饰静态常量:是属于类的,会在编译期被替代
命名规则:变量单词全部大写,多个但词之间用下划线隔开
3、abstract:抽象类
方法前+ abstract:表名这个方法值声明,不实现(没有方法体)。
例:public abstract void step();
没有方法体和方法体为空是不一样的
抽象类是基于父类的,抽象类一定是一个父类,为子类提供公共的模板(数据,普通方法)(子类共有的属性)
如果一个类中有抽象方法,这个类一定是抽象类。
抽象:abstract
可以修饰方法,类
抽象类中有构造器,不可以实例化
abstract和final不可以同时修饰一个类,即不可以用final修饰一个抽象类
如果一个类继承了抽象类,那么此类必须对父类中的所有抽象方法进行重写,否则该子类也会变成一个抽象类
接口:interface
接口中的成员:抽象方法,没有普通方法;静态常量
接口中没有构造器
语法:
public interface 接口名{
//静态常量
//抽象方法
}
在接口中定义的常量,默认提供public static final 修饰符
在接口中的方法,默认提供了public abstract 修饰符
实现方式:要有类对接口中的抽象方法进行重写(实现).
关键字implements:
类 implements 接口:这个类叫做实现类
表示:类会对接口中的所有抽象类进行实现(重写)。
如果类对接口中的抽象方法没有进行全部重写,这个类就变成了抽象类 --- 类似于抽象类
类的继承特点:单继承
接口的特点:多实现,一个类可以实现多个接口
A implements B,C{}
接口的继承:
interface A B C
A extends B
B extends C
接口的继承可以是多继承
A extends B,C
接口当中的多继承,必须它们全是接口
A:抽象类 B,C:接口
A extends B,C -- ×
接口的实现,类的继承可以同时出现
必须是先继承,再实现(继承在前,实现在后)
类A,抽象类B,接口C,D
A extends B implements C
A extends B implements C,D
接口,抽象类不能实例化。
接口的继承:
interface A B C
A extends B
B extends C
接口的继承可以是多继承
A extends B,C
接口当中的多继承,必须它们全是接口
A:抽象类 B,C:接口
A extends B,C -- ×
接口的实现,类的继承可以同时出现
必须是先继承,再实现(继承在前,实现在后)
类A,抽象类B,接口C,D
A extends B implements C
A extends B implements C,D
接口,抽象类不能实例化。
接口与抽象类的区别:
1、抽象类中可以有普通方法,但是接口中只能有抽象方法
2、抽象类中可以有常量,可以有变量,但是接口中只能有静态常量
3、抽象类中有构造方法,接口中没有构造方法
4、接口可以多继承,但是类的继承只能是单继承