1.继承的解释:Java语言中继承体现的是一种“is a”的关系,Java仅支持单继承 ,但可以多层继承,即子类继承父类,父类继承祖父类

2.继承的注意事项

       1.子类只能继承父类中非私有的成员变量和成员方法

       2.子类不能继承父类的构造方法,但可以通过super关键字去访问父类的构造方法

     注意:super的用法和this很像,this代表本类对象的引用,super代表父类存储空间的标识,可以理解为父类引用,可以操作父类的成员

        子类中所有的构造方法默认都会先访问父类中无参的构造方法,这是因为子类继承自父类,所以要先初始化父类,这样子类才能用父类中的成员变量,综上,子类的每一个构造方法        第一句肯定是super();调用父类的无参构造方法。如果父类没有无参的构造方法,那么子类的构造方法就会报错,解决办法:

                                  1.加入一个父类的无参构造方法

                                  2.通过使用super关键字去显示的调用父类的带参构造方法,例如父类中没有无参构造方法,但有一个带String name的构造方法:public Person(String name){},此时子类的构造方法第一行可以调用这个父类带参的构造方法:super("张三")。 this(...)和super(...)必须在第一行,避免多次初始化父类。

3.方法重写:子类中出现了和父类中一模一样的方法,包括方法名,参数,返回值类型等都一模一样,

      如果子类中的方法和父类中的方法一模一样,就近原则会先使用子类的方法。

4.方法重写的注意事项:父类中的私有方法不能被重写,因为子类无法继承父类的私有方法

           子类重写父类中的方法时,访问权限不能更低,,即子类方法的访问修饰符权限必须要大于等于父类的访问修饰符,所以如果父类中的该方法被public修饰,那么子类重写该方法,访问修饰符也必须是public

           父类静态方法,子类也必须通过静态方法重写,这与多态相关

5.代码展示

class Person2{
    private int age=10;
    String name="张三";
    int score=90;
    public Person2(){
        System.out.println("这是Person2的无参构造方法");
    }
    public void eat(){
        System.out.println("人都要吃饭");
    }
    public void show(){
        System.out.println("人都会思考");
    }
    static{
        System.out.println("静态代码块");
    }
    private void method(){
        System.out.println(age);
        System.out.println(name);
    }
    public void method2(){
        System.out.println(age);
        System.out.println(name);
    }
    public void play(){
        System.out.println("我是人,我可以玩");
    }
    private void example(){
        System.out.println("我是一个样例");
    }
}
class Student extends Person2 {
    int score=80;
    {
        System.out.println("构造代码块");
    }
    static{
        System.out.println("student的静态代码块");
    }
    public Student(){
        System.out.println("我是Student的构造方法");
    }
    public void method3(){
        int score=70;
        System.out.println(score);
        System.out.println(this.score);
        System.out.println(super.score);
    }
    public void play(){
        super.play();
        System.out.println("我同时也是一名学生,还需要学习");
    }
}
public class    ExtendsDemo {
    public static void main(String[] args) {
        Student s=new Student();//静态代码块 student的静态代码块  这是Person2的无参构造方法 构造代码块 我是Student的构造方法
        s.eat();//人都要吃饭
        s.show();//人都会思考
        //s.method(); 无法访问父类私有的成员方法
        //int a=s.age;无法访问父类私有的成员变量
        s.method2();//通过父类中的成员方法访问私有成员变量  10 张三
        s.method3();//70 80 90
        s.play();//我是人,我可以玩    我同时也是一名学生,还需要学习
    }

}