part 1:封装,"is-a" and "has-a"
1.封装的目的在于隐藏具体的实现。
2.封装有2个特色:
a.instance variable应该被保护,private or protected。
b.要访问instance variable,可以同过getter or setter。
3."is-a"意味着继承,extends。
4."has-a"means 一个类的实例中包含对另外一个或多个类的reference variable。
---------------------------------------------------------------------------
part 2:Overloading & Overriding
1.方法可以被Overloading & Overriding,但是Construtor只能Overloading。
2.Abstract方法可以被Overriding在它的第一个Concrete的子类里。
3.Overriding的方法必须要遵守的rules
a.必须有相同的参数表。
b.必须有相同的返回值。
c.不能用有更具有限制性的access modifier。例如之前是protected,之后可以用public,但是不能用private
d.不能抛出新的或者范围更宽的checked exception
4.final方法不能被overriding
5.overriding and inheritance and polymorphism
6.Overloading的方法必须要遵守的rules
a.必须有不同的参数表。
b.可以有不同的返回值。
c.可以有不同的access modifier。
d.可以抛出新的异常。
7.父类中的方法可以在子类中被overloading。
8.需要注意的事情:下面代码的运行结果是:Son
public class Father {
public void go() {
System.out.println("Father");
}
public static void main(String args[]) {
Father f=new Son();
f.go();
f.go2();//compile error . if "Son s=new Son()",it will work fine
}
}
class Son extends Father {
public void go() {
System.out.println("Son");
}
public void go2() {
System.out.println("Son2");
}
}
----------------------------------------------------
part 3:构造和初始化
1.在java中,调用构造函数是建立新对象的唯一途径。
2.每一个类,至少有一个构造函数。abstract类也是一样。
3.构造函数必须和类同名。
4.构造函数不能有返回值。
5.构造函数的执行顺序:先super,后自己。如果没有显式的写出,则为隐式的自动调用。
6.构造函数可以使用任何的modifier,包括priavte。
7.如果没有显式的声明构造函数,编译器会自动生成一个不带参数列表的,并且调用super也不带参数的默认的构造函数。
8.构造函数的第一行语句,要么是this(),要么是super()。
9.abstract类的构造函数,在它的一个具体子类被初始化的时候调用。
10.接口没有构造函数。
11.如果父类的构造函数都是带有参数列表的,那么其子类要写出构造函数,并明确的写出super(args1,args2...)。
12.构造函数不能被继承,所以也就不能被overridden,但是可以被overloaded。
13.this()和super()不能同时出现在一个构造函数当中。
-----------------------------------------------
part 4:返回值
1.overloaded函数可以改变返回值,overridden则不行。
2.Object reference返回值可以是null。
3.数组可以作为返回值。
4.当返回值是primitive类型的时候,任何可以隐式转化成这种类型的值都可以被接受。
5.如果返回一个类的reference,那么这个类的子类是可以接受的
6.如果返回一个接口,那么说有执行这个接口的类是可以接受的