类的访问权限控制
public修饰符:公有访问级别
默认修饰符:包级私有访问级别
不同包,使用默认修饰符修饰的类,不可以跨包使用
访问修饰符
四个关键字:private,默认(default,friendly),protected,public
访问权限范围从小到大,即安全性从高到低
访问修饰符 同类 同包 子类(不同包) 其它
private V X X X
除了类内,其它都不可以访问,子类不可以继承
默认修饰符 V V X X
包访问权限,即在同一个包内都是可以访问的
protected V V V X
在同类,同包都可以访问,继承的子类也可以访问
public V V V V
对任何对象都是可访问的
## 3、static关键字
一句话描述:
方便在没有创建任何对象的前提下,可以直接通过类进行访问(属性或者方法)
static可以修饰成员属性和成员方法,还可以单独存在,即static代码块
注意:
static代码块,可以出现在类的任何地方,类内可以有多个static代码块
static代码块,在类加载的时候,会按照static块的先后顺序进行执行,且只会执行一次。
类变量(static修饰的成员变量)和实例变量的区别
1)被static修饰的变量,在内存中只有一个拷贝,类内部,可在任何方法内直接访问静态变量,其他类中,可以直接通过类名访问
2)没有被static修饰的变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。
类方法(static修饰的成员方法)和实例方法的区别
1)静态方法中不能使用this和super,不能直接访问所属类的实例变量和实例方法,可直接访问类的静态变量和静态方法
2)可直接访问所属类的静态变量、静态方法、实例变量和实例方法
归纳:非静态方法可以访问静态属性和方法,但是反过来不成立
4、继承的用法
语法:
编写父类
[访问修饰符] class Pet {
//公共的属性和方法
}
编写子类
[访问修饰符] class Dog extends Pet {
//子类特有的属性和方法
}
注意:
子类和父类要存在is-a的关系
使用的继承关键字为:extens,类和类之间只能存在单继承,即只能继承一个类,同一个类可以被多个子类继承
访问父类的成员:
关键字:super,代表父类的对象
子类访问父类的构造:
super()或者super(参数)
子类访问父类的属性:
super.属性
子类访问父类的方法:
super.方法()
注意:
1)super关键字只能出现在存在继承关系的子类中,且只能在方法或者构造方法中
2)在子类构造方法中,super关键字调用父类的构造,只能在第一句
3)不可以通过super关键字访问父类的private属性或者方法
继承条件下,子类继承规则:
子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法
系统默认调用父类的无参构造方法
子类构造方法通过super显式调用父类的有参构造方法
执行父类相应构造方法,而不执行父类无参构造方法