个人简介
👀个人主页: 前端杂货铺
⚡开源项目: 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修饰)中的成员方法,其余不能继承
- 继承中成员变量访问特点:就近原则:先在局部位置找,本类成员位置找,父类成员位置找,逐级往上
方法重写
几个注意事项:
- 重写方法的名称、形参列表必须与父类中的一致
- 子类重写父类方法时,访问权限子类必须大于等于父类(空着不写 < protected < public)
- 子类重写父类方法时,返回值类型子类必须小于等于父类
- 只有被添加到虚方法表中的方法才能被重写
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();}@Overridepublic void eat() {System.out.println("子类-吃辣条");}@Overridepublic void drink() {System.out.println("子类-喝饮料");}
}
继承中构造方法的访问特点
- 子类不能继承父类的构造方法,但是可以通过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);}
}
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();}
}
被 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 < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append("]");return sb.toString();}public static double getAverage(double[] arr) {double sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum / arr.length;}
}
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);}
}
总结
本篇文章,我们学习了继承的相关内容,并认识了 static 的特性及使用场景…
好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!
参考资料:
- Java 基础(bilibili-黑马程序员)
- 菜鸟教程–Java