Java基础(六)——继承

07-11 1087阅读

个人简介

👀个人主页: 前端杂货铺

⚡开源项目: rich-vue3 (基于 Vue3 + TS + Pinia + Element Plus + Spring全家桶 + MySQL)

🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展

📃个人状态: 研发工程师,现效力于中国工业软件事业

🚀人生格言: 积跬步至千里,积小流成江海

🥇推荐学习:🍖开源 rich-vue3 🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Java基础(一)Hello World,8种数据类型,键盘录入
Java基础(二)数组,方法,方法重载
Java基础(三)类和对象、构造方法
Java基础(四)字符串、StringBuffer、StringBuilder、StringJoiner
Java基础(四)ArrayList

文章目录

    • 前言
    • 继承
      • Java 继承的特点
      • 方法重写
      • 继承中构造方法的访问特点
      • static
      • 总结

        前言

        大家好,这里是前端杂货铺。

        本篇文章,我们主要学习 Java 中继承,并顺带认识一下 static。


        继承

        继承,可以让类和类之间产生子父的关系。我们可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码复用性。

        子类可以得到父类的属性和行为,子类可以使用。

        子类可以在父类的基础上新增其他功能,使得子类更强大。

        public class 子类 extends 父类 {}
        

        Java 继承的特点

        • Java 只支持单继承,不支持多继承,但支持多层继承(A 继承父类 B,B 继承父类 C…)
        • Java 中所有的类都直接或间接继承于 Object 类
        • 子类只能访问父类中的非私有成员
        • 子类中 不能继承 父类中 非私有和私有的构造方法
        • 子类中 能继承 父类中 非私有和私有的成员变量(但私有不可用)
        • 子类中 能继承 父类中 虚方法表(非private、非static、非final修饰)中的成员方法,其余不能继承
        • 继承中成员变量访问特点:就近原则:先在局部位置找,本类成员位置找,父类成员位置找,逐级往上

          方法重写

          几个注意事项:

          • 重写方法的名称、形参列表必须与父类中的一致
          • 子类重写父类方法时,访问权限子类必须大于等于父类(空着不写
          • 子类重写父类方法时,返回值类型子类必须小于等于父类
          • 只有被添加到虚方法表中的方法才能被重写
            package com.javabasic.define;
            public class Test {
                public static void main(String[] args) {
                    Student student = new Student();
                    student.lunch();
                }
            }
            class Person {
                public void eat() {
                    System.out.println("父类-吃馒头");
                }
                public void drink() {
                    System.out.println("父类-喝开水");
                }
            }
            class Student extends Person {
                public void lunch() {
                    this.eat();
                    this.drink();
                    super.eat();
                    super.drink();
                }
                @Override
                public void eat() {
                    System.out.println("子类-吃辣条");
                }
                @Override
                public void drink() {
                    System.out.println("子类-喝饮料");
                }
            }
            

            Java基础(六)——继承


            继承中构造方法的访问特点

            • 子类不能继承父类的构造方法,但是可以通过super调用
            • 子类构造方法的第一行,有个默认的super()
            • 默认先访问父类中无参的构造方法,再执行自己
            • 如果想要调用父类的有参构造方法,必须手动书写

              Person.java

              package com.javabasic.define;
              public class Person {
                  String name;
                  int age;
                  public Person() {
                      System.out.println("父类的无参构造");
                  }
                  public Person(String name, int age) {
                      this.name = name;
                      this.age = age;
                  }
              }
              

              Student.java

              package com.javabasic.define;
              public class Student extends Person {
                  public Student() {
                      super();
                      System.out.println("子类的无参构造");
                  }
                  public Student(String name, int age) {
                      super(name, age);
                  }
              }
              

              Test.java

              package com.javabasic.define;
              public class Test {
                  public static void main(String[] args) {
                      // 调用无参构造,先走父,再走子
                      Student student = new Student();
                      // 间接调用父类的有参构造
                      Student student2 = new Student("张三", 22);
                      System.out.println(student2.name + ", " + student2.age);
                  }
              }
              

              Java基础(六)——继承


              static

              static 表示静态,是 Java 中的一个修饰符,可以修饰成员方法,成员变量。

              被 static 修饰的成员变量,叫做静态变量。

              • 被该类所有对象共享
              • 不属于对象,属于类
              • 随着类的加载而加载,优先于对象存在

                Student.java

                package com.javabasic.define;
                public class Student {
                    private String name;
                    private int age;
                    public static String teacherName;
                    public void show() {
                        System.out.println(name + " " + age + " " + teacherName);
                    }
                    public Student() {
                    }
                    public Student(String name, int age) {
                        this.name = name;
                        this.age = age;
                    }
                    public String getName() {
                        return name;
                    }
                    public void setName(String name) {
                        this.name = name;
                    }
                    public int getAge() {
                        return age;
                    }
                    public void setAge(int age) {
                        this.age = age;
                    }
                }
                

                Test.java

                package com.javabasic.define;
                public class Test {
                    public static void main(String[] args) {
                        Student.teacherName = "xx老师";
                        Student student = new Student("前端杂货铺", 20);
                        student.show();
                    }
                }
                

                Java基础(六)——继承


                被 static 修饰的成员方法,叫做静态方法。

                • 多用在测试类和工具类中
                • Javabean 类中很少会用
                • 静态方法中没有 this 关键字
                • 静态方法只能访问静态
                • 非静态方法可以访问非静态方法和静态方法

                  下面,我们创建一个工具类 ArrayUtil.java,里面均为静态方法,用于处理一些数组数据。

                  ArrayUtil.java

                  package com.javabasic.define;
                  public class ArrayUtil {
                      private ArrayUtil() {}
                      public static String printArr(int[] arr) {
                          StringBuilder sb = new StringBuilder();
                          sb.append("[");
                          for (int i = 0; i  
                  

                  Test.java

                  package com.javabasic.define;
                  public class Test {
                      public static void main(String[] args) {
                          int[] arr1 = {1, 2, 3, 4, 5};
                          String str = ArrayUtil.printArr(arr1);
                          System.out.println(str);
                          double[] scores = {1.0, 2.0, 3.0, 4.0, 5.0};
                          double average = ArrayUtil.getAverage(scores);
                          System.out.println(average);
                      }
                  }
                  

                  Java基础(六)——继承


                  总结

                  本篇文章,我们学习了继承的相关内容,并认识了 static 的特性及使用场景…

                  好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


                  参考资料:

                  1. Java 基础(bilibili-黑马程序员)
                  2. 菜鸟教程–Java

                  Java基础(六)——继承


VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]