面向对象具有封装、继承、多态的特性。
封装:public属性的是可以给其它对象访问,private就不行,当然,还有protect和没有修饰符的变量和方法,它们的详细情况如下表:
modifier | class | package | subclass | world |
---|---|---|---|---|
public | Y | Y | Y | Y |
protect | Y | Y | Y | N |
no modifier | Y | Y | N | N |
private | Y | N | N | N |
继承:子类继承父类。比如自行车继承了车的属性,相比车,自行车多了一些自己的属性
多态:有着相同的方法名称,但是方法的实现不同。
Class declarations
[public, private, protected, no_modifier] class <classname> [extends <baseclassname>] [implements <classname,classname,...>]{
/*variable and method declarations*/
}
Class variables
public class BankAccount {
// Class variable
public static int nextID = 100;
// Instance variables
private double balance;
private int id;
// Constant value
private final int PREFERENCE_CLIENT_LIMIT = 10000;
notice: static variables are initialised at their point of declaration, but a class may also have a special static initialisation block.
for example:
static {
nextID = 0;
}
Method definitions
default-constructor Method
构造函数是创建对象的时候自动调用的,用于初始化对象的变量。
Example
public BankAccount() { this(0.0) ; }
public BankAccount( double initBal ) { balance = initBal; id = newID(); }
注意:
- 构造函数的名字必须和类名相同
没有返回类型
拷贝构造函数
Java不支持像C++中那样的复制构造函数,这个不同点是因为如果不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
构造函数只能进行浅copy,就是只能复制简单类型如int,float数据到另一副本。
如果对象中包含了对象等复杂类型,浅拷贝对象其实是对象的引用,而不是重新生成一个新副本。这时,如果对一个实例的内部类类型修改,其他实例的内部类类型也会被修改。这时就需要copy构造函数来进行深复制(也就是使对象中包含的类等复杂类型使用值赋值,而不是引用赋值)。other-type method
其他类型的函数(即除了构造函数外)则需要返回类型。
Example
public double balance() { return balance; }
public int id() { return id; }
public void withdraw(double amt) { balance -=amt; }
public void deposit(double amt) { balance +=amt; }
public String toString() { return super.toString() + "(id:" + id + ", bal:" + balance + ")" ; }
new 操作符
new操作符的结果就是产生一个新建对象的引用
在Java中,所有的对象都位于全局内存,这就意味着我们不用担心栈溢出。
Example: Object creation and referencing (compiled).
public class ObjCreationExample {
public ObjCreationExample firstObject, secondObject;
public static void main(String args[]) {
ObjCreationExample object1 = new ObjCreationExample();
ObjCreationExample object2 = new ObjCreationExample();
ObjCreationExample object3 = new ObjCreationExample();
ObjCreationExample object4 = new ObjCreationExample();
ObjCreationExample object5 = new ObjCreationExample();
ObjCreationExample object6 = new ObjCreationExample();
object1.firstObject = object3;
object1.secondObject = object5; object2.firstObject = object4;
}
引用的具体情况如下图: