- Java用extends关键字表示继承关系
当创建一个类是,总是在继承,如果没有明确指出要继承的类,就总是从跟类Object进行继承
class People{
public People(){
}
}
class Man extens Peopele{
public man(){
}
}
- 子类访问权限
- 子类不能继承父类的private成员方法,就相当于你爸把钥匙藏了,子类访问不了,因为你爸不给你钥匙,钥匙=访问权限
- 父类protected成员方法
1. 在同一个包下 == 默认包访问权限
2. protected 在跨包只能是父子关系子类可以访问父类 用protected 修饰的成员变量和方法 ()
- 子类调用父类的成员方法和成员变量
在Java中用super来引用父类的成分
1. super.成员变量/super.成员方法;
主要在子类中调用父类的同名变量或者方法
2.super (parameter1 .parameter2 …)
在子类中显式地调用父类的构造方法,默认调用的是super() ;是无参构造的 . - 父类与子类的初始化顺序
public class extend {
static class p {
p() {
System.out.println("farher" + "的静态变量");
}
}
static class S {
S() {
System.out.println("son的静态变量");
}
}
static class get{
get(){
System.out.println("father的实例变量");
} }
static class put{
put(){
System.out.println("son的实例变量");
}
}
static class father {
static p a = new p();
get b = new get();
father() {
System.out.println("father的构造方法");
}
static {
System.out.println("father静态块");
}
{
System.out.println("father实例块");
}
public void add() {
System.out.println("father的普通方法");
}
}
static class son extends father {
static S b = new S();
put a = new put();
son() {
System.out.println("son的构造方法");
}
static {
System.out.println("son静态块");
}
{
System.out.println("son实例块");
}
public void print() {
System.out.println("son的方法");
}
}
public static void main(String[] args) {
son s = new son();
s.print();
}
}
结果为:所以初始化顺序为:
- 父类(静态变量,块)
- 子类(静态变量,块)
- 父类(实例变量,实例块,构造方法)
- 子类(实例变量,实例块,构造方法)
- 重写(override)
- 继承关系,发生在父子类中,在子类中最父类的方法进行重写
- 方法名 参数名必须相同
- 访问修饰符范围大于等于父类,不能重写父类中
- 访问修饰符private修饰的方法
- 返回值范围小于等于父类,抛出的异常范围小于等于父类
重写的原理:在方法区中将父类的原来的方法覆盖了
- 重载
- 发生在同一个类中
- 方法名必须相同
- 参数类型不同,个数不同,顺序不同,方法返回值和访问子UShi服可以不同,发生在编译时
- final 关键字
- 修饰的类不能被继承
- 修饰的类不能被重写
- 修饰的变量不能改变