java之继承2

继承中构造方法的关系?

记住下面几点结论:

  •  子类中所有的构造方法默认都会访问父类中空参数的构造方法,因为子类会继承父类中的数据,可能还会使用父类的数据。
  •  每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。,系统帮我们默认添加
  •  父类没有无参构造方法,子类怎么办? super解决或者this解决。 super(…)或者this(….)必须出现在构造方法的第一条语句上
package com.company;


public class Welcome {
    public static void main(String[] args) {
        Son S = new Son(18, "张三");
        /*
         执行到创建对象之后,
          先调用子类中的构造方法,如果没有参数,则默认调用父类的无参构造方法初始化对象
          如果有参数,则通过super(参数名) 传递到父类的默认参数,进行初始化

         */
        System.out.println(S.age);

    }
}

class Father {
    int age;
    String name;

    
    Father(int age, String name) {
        this.age = age;
        this.name = name;
        System.out.println("我是父类里有参数构造方法");

    }
}

class Son extends Father {
    Son(int age, String name) {
        super(age, name);  // super()系统默认加的这句话,用来调用父类里的构造方法,根据是否传值来确定调用有参数或者没有参数的方法
        System.out.println("我是子类里有参数构造方法");
    }

}
-------------------------
我是父类里有参数构造方法
我是子类里有参数构造方法
18

方法重写

子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。

应用场景
当父类的方法实现不能满足子类需求时,可以对方法进行重写。重写父类的方法分为2重情况:覆盖父类的方法,或者对父类方法进行扩展

覆盖父类的方法

  • 父类的方法实现和子类的方法实现,完全不同就可以使用覆盖的方式,在子类中重新编写父类的方法实现
  • 在子类中定义一个和父类同名的方法并且实现。重写之后,只会调用子类中重写的方法,而不会调用父类封装的方法

对父类方法进行扩展

  • 子类的方法实现中包含了父类的方法实现(父类原本封装的方法实现就是子类方法的一部分)就可以使用方法扩展了。
  • 具体实现方式是,首先在子类中重写父类的方法(定义于父类方法同名
  • 在需要的位置使用super()。父母方法来调用父类方法的执行
  • 代码其他位置针对子类的需求编写子类特有的代码实现

package com.company;


public class Welcome {
    public static void main(String[] args) {
        Son S = new Son();
        S.eat(); // 方法重写后,子类有就调用子类的

    }
}

class Father {
    public void eat() {

        System.out.println("吃饭");


    }
}

class Son extends Father {
    public void eat() {
        super.eat(); // 调用父类的eat()方法,
        System.out.println("吃冰激凌");

    }

}
-------------------------
吃饭
吃冰激凌

注意点:

  •  方法名、形参列表相同。
  •  返回值类型和声明异常类型,子类小于等于父类。
  •  访问权限,子类大于等于父类。、
  •  父类中私有方法不能被重写
  •  父类静态方法,子类也必须通过静态方法进行重写

猜你喜欢

转载自blog.csdn.net/weixin_44462792/article/details/86532337