*继承:
http://solodu.iteye.com/blog/470771
父类中静态方法和变量可以继承,但是不能覆盖,如果父类中定义的静态方法和变量在子类中重新定义 ,那么父类中定义的方法发变量会被隐藏,父类中的私有方法一样不能被覆盖掉。而其他的则会直接覆盖掉。
也就是说,对于可继承但不能覆盖的部分,如果子类重新定义,则在子类内存中,既有父类的那部分,又有子类中新的部分,访问父类的那个部分super.method/menber,或者向上转型,以父类声明的变量来访问。对于那些覆盖的部分,向上转型中,父类子类访问是同样的。向上转型,目的在于多态性。
- 多态:
- (1) 前提:把子类对象当成父类对象来看。
- (2) 把子类对象当成父类对象来看时:只能调用父类中定义的属性和方法。
- (3) 把子类对象当成父类对象来看时:如果子类覆盖了父类中的方法,则调用的是子类覆盖后的这个方法。
- 但是如果调用属性时是调用父类的属性而并非子类的,所以尽量不要定义父子类同名的属性。
- (4) 把父类强制转换成子类时,则调用的是子类中的方法。
http://www.cnblogs.com/qiaocheng/archive/2012/10/19/2731776.html
Person p = new Student("Jack");====等效于====Student t = new Student("Jack");Person p = t;
*构造方法:
构造方法可用来构造一个类的实例,不被子类继承,可用super调用。在任何情况下,构造一个实例的时候,将会调用沿着继承链的所有父类的继承方法。最好能为每个类提供一个无参构造方法。如果子类构造方法中既未显式调用父类构造方法super(),而父类中又没有无参的构造方法,则编译出错。
public class Apple extends Fruit {
}
class Fruit {
public Fruit(String name) {
System.out.println("Hello");
}
}
由于在Apple中没显式定义的构造方法,因为,apple的默认无参构造方法被隐式调用。因为Fruit是apple的父类,所以的apple的默认构造方法会自动调用fruit的无参构造方法。但是fruit没有无参构造方法,因此程序不能别编译。
*static:
static:表明静态区、共享,在c中也为该文件内独享,在java中则是无实例化即可调用,ertern声明全局变量。
作用域:与变量定义声明的位置有关,变量定义的域范围决定变量的作用域。注意,对于在编译就确认的变量,则作用域与位置无关。Java中实例变量和静态变量的作用域就是整个类,与变量在何处声明无关。
生命周期:编译与运行。【局部静态区】通常变量随函数的建立而建立、消亡而消亡,但上static则使变量生命周期延长,但作用域不变,多次调用函数,但数据可保存。
final:表明变量不可变、最终类。用final关键字修饰对象变量,只是不允许这个对象引用再指向其他的对象,但是这个引用所指向的对象的内容是可以改变的。http://blog.csdn.net/woshichunchun/article/details/7925823
存储区划分:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//main.cpp
inta=0;
//全局初始化区
char
*p1;
//全局未初始化区
main()
{
intb;
//栈
chars[]=
"abc"
;
//栈
char
*p2;
//栈
char
*p3=
"123456"
;
//123456\0在常量区,p3在栈上。
staticintc=0;
//全局(静态)初始化区
p1=(
char
*)
malloc
(10);
p2=(
char
*)
malloc
(20);
//分配得来的10和20字节的区域就在堆区。
}
|
*接口:
接口可继承。
interface interfaceA {
int a = 5;
void testA();
}
interface interfaceB {
int b = 5;
void testB();
}
interface interfaceC extends interfaceA,interfaceB {
int c = 5;
void testC();
}
public class interfaceTest {
public static void main(String[] args) {
System.out.println(interfaceC.a);
System.out.println(interfaceC.b);
System.out.println(interfaceC.c);
}
}
*类型:
通过将不同的类型进行组合得到复杂的类型后,使用后会出现想更改其中一部分却又不想全部重新定义的再利用需求。因此出现了构成要素部分可变的类型,即总称型。想要表现不同的情况时,出现了以类型为参数创建类型的函数,C++中模板、Java中泛型可以说是这种创建类型的机制。
*容器:
存放多个元素的东西称为容器,C中数组,Python中元组,Java中列表等,不同语言中同名的容器的内部构造、性质等也可能大相径庭。
数组与链表
字典:字符串和值的对应关系
散列表:使用以字符串为参数返回整数的散列函数,字符串和值的对应
树:完全二叉树若考虑用数组存储,根节点为1,从上到下,从左到右编排,若父节点为K,则左子树为2K,右为2K+1,2K/2=K,(2K+1)/2=K.
*字符:
通过将不同的类型进行组合得到复杂的类型后,使用后会出现想更改其中一部分却又不想全部重新定义的再利用需求。因此出现了构成要素部分可变的类型,即总称型。想要表现不同的情况时,出现了以类型为参数创建类型的函数。