函数重载(overload)
- 一个类可以有多个构造函数,只要他们参数不同
- 创建对象的时候给出不同的参数值,就会自动调用不同的构造函数
- 通过
this()
还可以自动调用其他构造函数
class Sample{
int sam;
Sample(){
sam = 0;
}
Sample(int sam){
this.sam = sam;
this(); //此处this()用于调用那个没有参数的构造函数
}
}
- 一个类里的同名但参数表不同的函数构成了重载关系
对象交互
private
- 只有这个类内部可以访问
- 类内部指类的成员函数和定义初始化
- 这个限制是对类而不是对对象(同一个类下不同对象可以访问对方的_private_变量)
public
- 任何人都可以访问
- 任何人指的是在任何类的函数或定义初始化中可以使用
- 使用指的是调用、访问或定义变量
friendly(省略)
- 和其位于同一个包的其他类可以访问
protected
- 自己可以访问、处在同一个包的其他类可以访问、子类(可以在不同包)可以访问
编译单元
- 一个
.java
文件为一个编译单元 - 编译单元内的
public class
类名称必须和编译单元名字相同 - 当一个编译单元里有不只一个class类的时候只能有一个public属性的类
类变量 与 类函数
static
- 不属于任何对象而是属于这个类
类变量 static
类函数 static
- 类函数只能访问类变量
容器类
ArrayList<String> name = new ArrayList<String>();
- 容器类有两个类型:1.容器的类型。2.元素的类型。
对象数组
- 对对象进行for-each循环,如果在其中将
k
进行值改变的操作则对象数组所管理的对象的值也发生改变。
set
- ‘集合’ 中元素无序
Hash表
- 创建
HashMap<K, V> name = new HashMap<K, V>();
例如创建关键字为整型,值为字符串常量的散列表private HashMap<Integer, String> coins = new HashMap<Integer, String>();
- 如果向表中加入key相同而value不同的数据则后一个value会覆盖前一个
继承
- 如果一个子类继承自父类,若子类
super();
参数为空或无super();
则都会去寻找父类中无参数的构造器。 - 若子类
super(...);
有参数,则去寻找父类中有参数的构造器 - 子类父类同名的变量和函数,在子类中使用时优先使用子类自己的,父类的被隐藏了,如果要调用父类的,那应该用
super.*
来引用
多态变量和向上造型
多态变量
- Java的对象变量是多态的,它们能保存不止一种类型的对象
- 他们可以保存声明类型的变量,也可以保存声明类型的子类的对象
- 当把子类的对象赋给父类的变量的时候,就发生了_向上造型_
造型cast
- 子类的对象可以赋值给父类的变量(注意,java中不存在对象对对象的赋值)
- 父类的对象不能赋值给子类的变量
Vechicle v;
Car c = new Car();
v = c;//可以
c = v;//==编译出错==
- 可以用造型
c = (Car)v;
(只有当v这个变量实际管理的是Car才行)(区别于强制类型转换) (只是当作另一个类型看待,而非变成了另一个类型)
区别声明类型和动态类型
java语言中的函数调用的绑定为动态绑定
类型系统
单根结构 Object类
所有的类都是继承自 Object类,Object类中的函数有***toString(); equals();***