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. 面试题:求第K大元素(topK)?

    一.引言二.普通算法算法A:算法B:三.较好算法算法C:算法D:四.总结 一.引言 ​ 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内 ...

  2. 频率学派与贝叶斯学派(先验分布与后验分布,MLE和MAP)

    频率学派(古典学派)和贝叶斯学派是数理统计领域的两大流派. 这两大流派对世界的认知有本质的不同:频率学派认为世界是确定的,有一个本体,这个本体的真值是不变的,我们的目标就是要找到这个真值或真值所在的范 ...

  3. JavaSE:关键字(全)

    访问控制: private 访问控制方式:私有的 protected 访问控制方式:受保护的 public 访问控制方式:公共的 类.方法和变量修饰符: abstract 声明抽象,表明类或者成员方法 ...

  4. SAP HUM事务代码 HUMAT 之初探

    SAP HUM事务代码 HUMAT 之初探 SAP菜单中,该事务代码在这里: 1)如下的inbound delivery号码, Document flow, 已经完成了PGR, 2)执行HUMAT,进 ...

  5. java.lang.UnsatisfiedLinkError:dlopen failed: “**/*/arm/*.so” has unexpected e_machine: 3

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10458448.html 今天在做APP的时候使用so库,可结果一加载so库的时候便发生了这个莫名其妙的错 ...

  6. NFS挂载异常 mount.nfs: Input/output error

    [root@localhost ~]# vi /etc/exports #增加/nfs 192.168.10.132(rw,no_root_squash,no_all_squash,async) [r ...

  7. Sql中CHARINDEX用法

    CHARINDEX作用 写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEI ...

  8. 【转载】Win7利用任务计划程序实现定时关机

    在Win7.Win8或者Win10系统中,如果要实现电脑的自动定时关机,不需要借用任何的外部程序,直接系统自带的任务计划程序即可实现电脑的定时自动关机,支持设定电脑关机时间以及执行频率次数,如固定每天 ...

  9. 通信(二):进程间通信之socket

    一.为什么要学习socket? 我们打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?我们用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket.本地的进程间通 ...

  10. Storm入门(十三)Storm Trident 教程

    转自:http://blog.csdn.net/derekjiang/article/details/9126185 英文原址:https://github.com/nathanmarz/storm/ ...