1 package、import 和 import static

1.1 Package

Java 引入了包(Package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理问题。Java 允许将相关的类放在同一个 package 下,从而组成逻辑上的类库单元。如果希望把一个类放在指定的包结构下,应该在 Java 源代码的第一个非注释行放置如下格式代码:

 package packageName;

位于包中的每个类的完整类名都应该是包命和类名的组合,如果其他人需要使用该包下的类,也应该使用完整类名。

用命令行编译时,用 javac -d . xxx.java 会生成包层次相同的目录结构。
位于包中的类,在文件系统中也必须有与包命层次相同的目录结构。推荐用上述方法编译。
一个源文件只能指定一个包,只能包含一条 package 语句。同一个包下的类可以自由访问。值得注意的是,父包和子包之间确实表示了某种内在的逻辑关系,但在父包和子包在用法上则不存在任何关系,如果父包中的类要使用子包中的类,一样要使用包的全名。

1.2 import

Java 引入了 import 关键字,import 可以向某个 Java 文件中导入指定包层次下某个类或全部类

  • 导入单个类:
 import package.subPackage…ClassName;
  • 导入全部类
 import package.subPackage…*;

一旦用 import导入指定类后,在该源文件中使用这些类的时候可以省略包前缀,不用使用包全名。

PS:如果一个源文件中导入了两个包,这两个包下有重名的类,这个时候依然要使用全名调用。

1.3 import static

import static 用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。

  • 导入单个:
 import static package.subPackage…ClassName.fieldName|methodName;
  • 导入全部:
 import static package.subPackage…ClassName.*; 

导入后,调用方法或静态变量,不需要写类名。

2 类的继承

2.1 继承的特点

Java 的继承通过 extends 关键字来实现,实现继承的类被称为子类,被继承的类被称为父类,有的也称其为基类、超类。

子类是对父类的扩展,子类是一种特殊的父类。每个类最多只有一个直接父类。值得指出的是,Java的子类不能获得父类的构造器。

如果定义一个 Java 类时并未显式指定这个类的直接父 类,则这个类默认扩展 java. lang. Object 类。因此,java. lang. Object 类是所有类的父类,要么是其直接父类,要么是其间接 父类。

2.2 重写父类的方法

  • 子类包含与父类同名方法的现象被称为方法重写( Override),也被称为方法覆盖。
  • 方法的重写要遵循“ 两同两小一大”规则,“ 两同”即方法名相同、形参列表相同;“ 两 小” 指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出 的异常类应比父类方法声明抛出的异常类更小或 相等;“ 一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。尤其需要指出的是,覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例 方法。
  • 当子类覆盖了父类方法后,子类的对象将无法访问父类中被覆盖的方法,但可以在子类方法中调用父 类中被覆盖的方法。如果需要在子类方法中调用父类中被覆盖的方法,则可以使用 super( 被覆盖的是实例方法)或者父类类名( 被覆盖的是类方法)作为调用者来调用父类中被覆盖的方法。
  • 如果父类方法具有 private 访问权限,则该方法对其子类是隐藏的,因此其子类无法访问该方法,也就是无法重写该方法。如果子类中定义了一个与父类private方法具有相同的方法名、相同的形参列表、相同的返回值类型的方法,依然不是重写,只是在子类中重新定义了一个新方法。
  • 父类方法和子类方法也可以发生重载!

2.3 super 限定

需要在子类方法中调用父类方法,可以使用 super 限定来调用父类被覆盖的方法。super 用于限定该对象调用它从父类继承得到的实例变量或方法。和 this 一样不能在静态方法中使用。

当子类和父类拥有同名变量时,子类方法里访问的默认是子类定义的变量,父类的变量需要用 super 前缀来访问。

系统查找某一变量 a 的顺序:

  1. 查找该方法中是否有名为 a 的局部变量;
  2. 查找当前类中是否包含名为 a 的成员变量;
  3. 查找 a 的直接父类中是否有名为 a 的成员变量,依次上溯到 a 的所有费雷。

2.4 调用父类构造器

在子类构造器中调用父类构造器可以类似的使用 super 调用来完成。

值得注意的是,不管是否使用 super 显示执行父类的构造器初始化代码,子类构造器总会调用父类构造器一次,有如下几种情况:

  • 子类构造器第一行使用 super 显示调用父类构造器,系统将根据 super 调用里传入的实参列表调用父类相应的构造器。
  • 子类的的构造器第一行代码使用 this 显示调用本类中重载的构造器,系统将根据 this 调用里传入的实参列表调用本类中的另一个构造器, 执行本类另一个构造器之前,会调用父类的构造器。
  • 子类构造器中既没有 super 也没有 this ,系统会在执行子类构造器之前,隐式调用父类无参构造器。

3 LeetCode

27. 移除元素

 class Solution {
public int removeElement(int[] nums, int val) {
int count = 0;
for(int i = 0; i < nums.length - count; i++){
if(nums[i] == val){
for(int j = i + 1; j < nums.length; j++) {
nums[j - 1] = nums[j];
}
count++;
i--;
}
}
return nums.length - count;
}
}

28. 实现strStr()

 class Solution {
public int strStr(String haystack, String needle) {
for(int i = 0; i < haystack.length() - needle.length() +1; i++){
if(haystack.substring(i, i + needle.length()).equals(needle))
return i;
}
return -1;
}
}

包、继承以及 LeetCode 27、28题的更多相关文章

  1. leetcode第28题--Divide Two Integers

    Divide two integers without using multiplication, division and mod operator. 分析:题目意思很容易理解,就是不用乘除法和模运 ...

  2. 【LeetCode算法-28/35】Implement strStr()/Search Insert Position

    LeetCode第28题 Return the index of the first occurrence of needle in haystack, or -1 if needle is not ...

  3. LeetCode 每日一题「判定字符是否唯一」

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 题目 ...

  4. LeetCode第[18]题(Java):4Sum 标签:Array

    题目难度:Medium 题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...

  5. 前端与算法 leetcode 27.移除元素

    目录 # 前端与算法 leetcode 27.移除元素 题目描述 概要 提示 解析 算法 @(目录) # 前端与算法 leetcode 27.移除元素 题目描述 27.移除元素 概要 题目本身其实挺简 ...

  6. leetcode 第188题,我的解法,Best Time to Buy and Sell Stock IV

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  7. leetcode第37题--Count and Say

    题目:(据说是facebook的面试题哦) The count-and-say sequence is the sequence of integers beginning as follows:1, ...

  8. LeetCode第[1]题(Java):Two Sum 标签:Array

    题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...

  9. LeetCode的刷题利器(伪装到老板都无法diss你没有工作)

    在工程效率大行其道的今天,如果不会写点代码以后也不容易在测试圈混下去.今天给大家推荐一个LeetCode的刷题利器,可以伪装到连你老板在这里走过去都无法确认你是在干活呢,还是在干活呢. LeetCod ...

随机推荐

  1. MNIST手写识别

    Demo侠可能是我等小白进阶的必经之路了,如今在AI领域,我也是个研究Demo的小白.用了两三天装好环境,跑通Demo,自学Python语法,进而研究这个Demo.当然过程中查了很多资料,充分发挥了小 ...

  2. 深入理解数据库磁盘存储(Disk Storage)

    数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...

  3. 一行代码实现数组去重(ES6)

    ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如: let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3]; ...

  4. Spring Boot 2.0 图文教程 | 集成邮件发送功能

    文章首发自个人微信公众号: 小哈学Java 个人网站: https://www.exception.site/springboot/spring-boots-send-mail 大家好,后续会间断地奉 ...

  5. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  6. Linux-误删apt-get以及把aptitude换回

    误删apt-get拯救我的linux 一.前言 先来说一下apt-get, 这个我们使用linux过程中最常用的命令之一. apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于 ...

  7. Keepalived部署与配置详解

    Keepalive详解 工作原理 Keepalived本质就是为ipvs服务的,它也不需要共享存储.IPVS其实就是一些规则,Keepalived主要的任务就是去调用ipvsadm命令,来生成规则,并 ...

  8. 《k8s-1.13版本源码分析》-调度器框架

    本文原始地址(gitbook格式):https://farmer-hutao.github.io/k8s-source-code-analysis/core/scheduler/scheduler-f ...

  9. Java集合 - List介绍及源码解析

    (源码版本为 JDK 8) 集合类在java.util包中,类型大体可以分为3种:Set.List.Map. JAVA 集合关系(简图) (图片来源网络) List集合和Set集合都是继承Collec ...

  10. CSS消除button标签的默认样式

    button{ /*消除button的默认样式*/ /*这种写法是对所有的button标签同时生效*/ margin: 0px; padding: 0px; /*自定义边框*/ border: 0px ...