1.static
(1)static
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
(2)静态变量
静态变量:被static修饰的成员变量,叫做静态变量
1.特点
(1)被该类的所有对象共享
(2)静态属性不属于某一个对象,而是属于某个类
(3)静态变量随着类的加载而加载,是优先于对象存在
2.调用方式
类名调用、对象名调用
(3)静态方法
静态方法:被static修饰的成员方法,叫做静态方法
1.特点
(1)多用在测试类和工具类中
(2)Javabean类中很少会用
2.调用方法
类名调用、对象名调用
3.拓展
工具类:帮助我们做一些事情,但是不描述任何事物的类
Javabean类:用来描述一类事物的类
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口
(4)注意事项
1.静态方法只能访问静态变量和静态方法
2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
3.静态方法中是没有this关键字
2.继承
(1)继承
1.java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。
例如:public class Student extends Person{}
Student称为子类(派生类),Person称为父类(基类或超类)
2.当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码
3.可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码的复用性
4.子类可以得到父类的属性和行为,子类可以使用
5.子类可以在父类的基础上新增其他功能,让子类更强大
(2)特点
1.Java只支持单继承,不支持多继承,但支持多层继承
2.单继承:一个子类只能继承一个父类
3.不支持多继承:子类不能同时继承多个父类
4.多层继承:子类A可以继承父类B,父类B可以继承父类C。父类B是子类A的直接父类,父类C是子类A的间接父类
5.每一个类都直接或者间接的继承于Object
6.子类只能直接访问非私有的成员
(3)子类能继承的内容
1.子类不能继承父类中的构造方法,但子类实例化时,子类会默认调用父类的无参构造方法,如果父类没有无参构造方法必须通过super关键字显示调用父类的有参构造方法
2.子类可以直接继承和访问非私有的成员变量,子类不能直接访问父类的private成员变量,可以通过get和set方法间接访问和修改
3.子类可以继承并直接调用父类中的非私有的成员方法,子类不能继承父类的private方法,因为私有方法的作用域仅在本类内部,子类可以继承父类的静态方法,但如果在子类中定义了与父类静态方法签名相同的方法,这不是重写而是隐藏,调用时会根据对象的声明类型来决定调用哪个方法
(4)成员变量的访问特点
1.成员变量
调用时,先从局部位置找,再从成员位置上找,最后从父类成员位置上找,逐级往上
若出现重名的成员变量则
System.out.println(name); //从局部位置开始往上找
System.out.println(this.name); //从本类成员位置开始往上找
Syetem.out.println(super.name); //从父类成员位置开始往上找
2.成员方法
(1)方法的重写
当父类的方法不能满足子类现在的需求时,需要进行方法重写,在继承体系中,子类出现了的父类中一模一样的方法声明,我们就称子类这个方法是重写的方法
(2)@Override重写注释
1.@Override是放在重写后的方法上,校验重写时语法是否正确
2.加上注解后,会说明语法错误
(3)方法重写的注意事项和要求
1.重写方法的名称、形参列表必须与父类中的一致
2.子类重写父类方法时,访问权限子类必须大于等于父类
3.子类重写父类方法时,返回值类型必须小于等于父类
4.重写方法时尽量和父类保持一致
5.只有被添加到虚方法表中的方法才能被重写
3.构造方法
(1)子类中的构造方法不会被子类继承,但是可以通过super调用
(2)子类中所有的构造方法默认先访问父类中的无参构造,在执行自己
(3)子类再初始化的时候有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据
(4)子类初始化之前,一定调用父类构造方法先完成父类数据空间的初始化
(5)子类构造方法的第一行语句默认都是:super( ),不写也存在,且必须再第一行
(6)如果想调用父类有参构造,必须手动写super进行调用
例:
无参构造
package a01inheriy;
public class Parent {
public Parent() {
System.out.println("父类的无参构造方法被调用");
}
}
package a01inheriy;
public class Child extends Parent{
public Child() {
System.out.println("子类的构造方法被调用");
}
}
package a01inheriy;
public class Main {
public static void main(String[] args) {
Child child = new Child();
}
}
//输出结果:父类的无参构造方法被调用
// 子类的构造方法被调用
有参构造:
package a01inheriy;
public class Parent {
private int x;
//父类的有参构造方法
public Parent(int x){
this.x = x;
System.out.println("父类的有参构造方法被调用, x = " + x);
}
}
package a01inheriy;
public class Child extends Parent{
//子类的构造方法
public Child(int x) {
//显示调用父类的有参构造方法
super(x);
System.out.println("子类的构造方法被调用");
}
}
package a01inheriy;
public class Main {
public static void main(String[] args) {
Child child = new Child(10);
}
}
//输出结果:父类的有参构造方法被调用, x = 10
// 子类的构造方法被调用
(5)this和super
1.this
(1)理解为一个变量,表示当前调用者的地址值
(2)访问成员变量:this.成员变量。访问本类的成员变量
(3)访问成员方法:this.成员方法(...)。访问本类的成员方法
(4)访问构造方法:this.(...)。访问本类的成员方法
2.super
(1)代表父类存储空间
(2)访问成员变量:super.成员变量。访问父类的成员变量
(3)访问成员方法:super.成员方法(...)。访问父类的成员方法
(4)访问构造方法:super(...)。访问父类的构造方法
1343

被折叠的 条评论
为什么被折叠?



