面向对象:
类和对象的关系
类的定义:
注意事项:
如何创建对象:
一个对象的内存图:
两个对象使用同一个方法:
两个引用指向同一个对象:
使用对象类型作为方法的参:
使用对象类型作为方法的返:
成员变量与全局变量的区别:
面向对象的特点:
private的使用:
this的用法:
如何构造一个方法:
构造方法的注意事项:
定义一个标准的类:
多态:
类型为X的的参考变量,其指向的对象类型既可以是X,也可以是X的子类。
一个对象声明时,可以是父类,但赋值时可以给子类赋值。
eg:Student s; s = new Colleague()
(句柄s 能访问那些成员变量是由其类型决定的。)
但是可以通过强制类型转化就可以访问子类的成员变量了。
多态的用途:
1.可以把通过一个数组把不同的对象组合在一起。(参考数据类型存放的是地址值所以可以办到)
2.用于方法参数的传递。(类似abstract的?)
类型判断:对象 instanceof 类。
参考类型转换总结:
子类向父类的转换可以自动进行,而父类向子类的转换则需要指明。
(强制转换也不行,变量声明是父类但利用多态性指向的是该子类,可以强转)
非访问控制符:
成员变量:类内方法体外的变量。
static:
实例变量(无static修饰的成员变量)
类变量(有static修饰的成员变量)
类变量只跟类变化。实例变量只跟对应对象变化
静态变量(类变量)具备以下特点:
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
类变量和实例变量的区别是:
1,存放位置。
类变量随着类的加载而存在于方法区中。
实例变量随着对象的建立而存在于堆内存中。
2,生命周期:
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象的消失而消失。
类方法(main方法就是类方法):
1.类方法只能直接访问类变量或方法参数,不能直接访问实例变量。(实例变量必须通过创建对象,通过对象的句柄访问)
2.静态方法不能直接访问非静态方法(想访问必须向先创建该类的对象或自身的,再通过句柄访问)
final(修饰什么,什么就不可更改):
final修饰的类为最终类,不能被继承(不可修改)。
final 修饰的方法为最终方法,不能被覆盖(即继承之后,不能被子类修改)。
final 修饰的变量变为常量。(即赋值后,值无法改变)。
abtract:
abstract修饰的类是抽象类,既有歇类中有些内容还没有定义完整,这样的类只能将类头部定义完整。抽象类一般只能做父类。(与final相克,不能同时修饰同一个类)
修饰方法:只定义了方法头部,没有方法体。eg:abstract void tt ();
抽象类不一定有抽象方法,但含有抽象方法的类一定是抽象类。
如果子类没有实现抽象类中所有的抽象方法,那么子类要定义为抽象类。
作用:
抽象类的作用就是做抽象类:
接口:
格式: interface 接口名{}
接口中的方法体不给出方法体,是抽象方法,即都是public static 方法,接口中只允许定义常量。不允许定义变量,接口中的成员变量都是public static final 型的。
实现:
class 类名 implement 接口列表{
类体
}
类实现接口意味着类要继承接口,然后再重写方法体。 一个类实现一个接口,如果该类不是抽象类,则必须实现接口中的每个方法,如果一个类同时实现多个接口,接口名之间必须用逗号隔开。
访问控制符
内部类:
非静态内部类:
菲静态内部类在外部类中与外部类的方法处于等同位置。
格式:
class Outer {
class Inner{}
}
非静态内部类不允许有任何静态声明。
静态内部类(创建静态内部类时,不用事先创建外部类的对象):
静态内部类只能直接访问外部类的静态成员,不能直接访问外部类的非静态成员,如一定要访问,则必须通过对象访问。
方法内部类:
把类定义在方法内,就叫做方法内部类,方法内部类的作用域与局部变量相同。