方法重载
在一个类中,有一系列方法,其方法名相同,但各自的参数不同,称为方法重载(overload), 比如String类中的indexOf方法
public class Hello {
public void hello(){}
public void hello(String name){
System.out.println("Hello" + name + "!");
}
public void hello(String name, int age){
if (age < 18){
System.out.println("Hi" + name + "!");
} else{
System.out.println("Hello" + name + "!!");
}
}
public static void main(String[] args) {
Hello h = new Hello();
h.hello();
h.hello("小明");
h.hello("小芳", 16);
}
}
- 注意:方法返回值的类型通常是相同的
- 目的:对于功能类似的方法,使用相同的名字,方便记忆和调用
继承
- 继承可以复用代码,直接调用父类的方法,这样子类就可以不用写重复的代码,而专注于编写扩展功能的代码
- 继承使用extends关键字
- 继承除了新加方法外,也可以重写父类的方法
- Java不直接支持多重继承,一个类只有一个父类,但可以使用接口来实现多重继承
- 父类(parent class)也可以叫超类(super class)、基类(base class)
- 继承树,Java中,除了Object外,任何类都会继承某个类,如果没有写extends,编译器默认其继承extends Object
public class Person {
String name;
int age;
public String getName(){
return name;
}
public int getAge(){
return age;
}
public static void main(String[] args) {
Student s = new Student();
s.name = "小明";
s.age = 12;
s.score = 80;
System.out.println(s.getName());
System.out.println(s.getAge());
System.out.println(s.getScore());
}
}
class Student extends Person{
int score;
public int getScore(){
return score;
}
@Override
public int getAge() {
return age + 1;
}
}
位运算
如下,<< 1
表示向左移一位,那么7的二进制向左移一位,实际上就是乘2,结果就变成了14。
public class Demo{
public static void main(String[] args) {
int n = 7; // 00000000 00000000 00000000 00000111
int m = n << 1; // 00000000 00000000 00000000 00001110
System.out.println(m); // 2^3+2^2+2^1+0 = 14
}
}
这里对int进行说明下,
- int整数类型最大的范围为32位(二进制)
- 其最多能够表示整数的个数为2^32个
- 最高位0表示正数,最高位为1表示负数
- 正整数表示的最大值为 2^31-1,即2,147,483,647
- 默认值为0
- 负整数表示的最小值为 -2^31,即-2,147,483,648
具体关于位的运算过程,可以参考以下博客,写的很详细。
https://blog.csdn.net/hhy107107/article/details/82801780
使用意义:
- 位运算是底层运算,效率较高
- 位运算可以减少代码量,理解简单,比如设置增删改查四种权限的位运算
复制一篇有趣的题目,来自上边链接博客。
有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?
根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。具体实现跟3个老鼠确定8个瓶子原理一样。
000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
一位表示一个老鼠,从左到右分别代表老鼠3,老鼠2,老鼠1。0-7表示8个瓶子。也就是分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,4、5、6、7号瓶子的药混起来给老鼠3吃,哪个老鼠死了,相应的位标为1。如老鼠1死了、老鼠2没死、老鼠3死了,那么就是101=5号瓶子有毒。同样道理10个老鼠可以确定1000个瓶子