成员变量与局部变量
位置不同
成员在堆内存中 局部在栈内存
成员的在类中方法外 局部在类中方法声明上或方法定义中
生命周期不同
初始化值不同
注:成员变量与局部变量相同,采用就近原则。
构造方法
构造方法不需要显示调用,在对象创建时直接调用(用new来调用)
构造方法无返回值,不能写void;
默认构造方法(default constructor)
this能调用另一个构造方法【this(参1 无,参2 ,参……);】
静态 static
Static是被所有对象共享的
Static的特点:
a.随类的加载而加载
回想main方法
b.被类的所有对象共享。
如:共用一个编号。
饮水机(适合用静态修饰)
水杯(不能用静态修饰)
c.优先于对象存在。
d.可以通过类名调用
可以通过对象名调用
推荐使用类名调用
静态修饰的内容一般称为:与类相关的,类成员。
对静态而言类的任何一个对象去修改它时访问的是同一内存单元
两种格式:
类名.静态变量名
对象名.静态变量名
不能使用this super
静态变量独立于方法之外
多态
前提:
有继承关系;
有方法重写;
有父类引用指向子类;
父类 f = new 子类
由于成员方法存在重写,所以运行看右边。
无参构造方法父类子类先后访问(都访问)
有参的访问运行结果第一个是无参(父类构造)第二个是有参子类(含参构造)
重写方法时不能定义静态
重写(Overriding)
重写规则
1. 参数列表:必须与被重写方法的参数列表完全匹配。
2. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同
3. 访问级别:一定不能比被重写方法强,可以比被重写方法的弱。
4. 非检查异常:重写方法可以抛出任何非检查的异常,无论被重写方法是否声明了该异常。
5. 检查异常:重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常
6. 不能重写标志为final,static的方法
其中:
1. 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
2. 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
3. 子类函数的访问修饰权限不能少于父类的;
重写与覆盖区别
1.非静态方法,覆盖=重写,有多态
2.静态方法,是不能重写的,比如你添加@overwrite直接就报错了,我们知道静态属于类,通过类名就可以直接调用该方法,所以这里也是一样,只看引用类型,跟创建对象类型无关。
格式
【Public】 interface 接口名称 【extends父接口名列表】
{
【Public】 【static】 【final】数据类型 常量名=常量;
……
【Public】【abstract】返回值的数据类型 方法名(参数表);
……
【public】static 返回值数据类型 方法名(参数表){
……
}
……
【public】default返回值的数据类型 方法名(参数表){
方法体
}
……
}
接口实现
Class 类名称implements接口名表
{
……
}
接口的继承
Interface 接口名3 extends 接口名1,接口名2……
多重继承
Interface 类名implements接口名1,接口名2……