类与对象:
类:具有相同特征的一类事物的抽象
对象:类的具体实例
类(对象)之间的关系:
关联关系:一个类的实例是另一个类中方法的参数
继承关系(一般与特殊):XX是一种XX,一个类派生出来另一个类
聚合关系(整体与部分):
实现关系:
多态:
面向对象思想
1有哪些类与对象
2类与对象有哪些属性与方法
3类与类的关系
成员变量:定义后可以初始化,若不初始化,系统自动初始化为默认值。(局部变量必须初始化后才能使用)
内存分为4部分,分别为代码区,栈(存放对象引用,局部变量),堆(存放对象,成员变量),数据段(存放静态变量及字符串常量)
基础数据类型定义的变量占一块内存(该内存空间存变量值),引用数据类型定义的变量占两块内存。
Dog d1,d2; //栈中分配一块内存a1,a2
d1=new Dog(); //堆中分配一块内存b,a1指向b
d2=new Dog(m,n); //堆中分配一块内存c,a2指向c,c中存放成员变量
//栈中分配两块内存j,k存放构造函数的参数值m,n,将j,k赋值给c中成员变量,
//释放栈中内存j,k
a1与a2中存放的不是物理地址,但根据存放的内容可以找到物理地址
返回值在栈中有临时的存储空间,返回完后就消失。
方法除了在内存的代码区存储外,在执行时还会占有内存,执行完方法就释放。在同一个时间同一个方法可能在执行多次
this关键词:指表示向当前对象的引用,存在于堆内存中的对象里,指向对象本身。this.成员方法/成员变量.
调用本类另外构造方法.this(被调用的构造方法参数)
static关键字:修饰变量时表示静态成员变量,属于类的公有变量,类的所有对象共享这一个变量
修饰方法时表示静态方法,在静态方法中不能直接访问非静态变量,非静态方法,可以通过创建对象调用。
super关键字:在子类中通过super引用父类对象。 super.父类成员方法/父类成员变量
在子类中调用父类构造方法。super(父类构造方法的参数)。(必须写在子类构造方法第一行)
子类的构造方法中必须调用父类构造方法,若没有显式调用父类构造方法,则默认调用父类无参构造方法。若父类中无无参构造方法,则编译出错
Object类:
Object类是所有类父类,若定义的一个类未说明继承哪个类,就默认继承Object类
finalize():当虚拟机回收垃圾前调用的方法。
getClass():返回已编译好的class对象。
hashCode():返回对象的哈希码(哈希码独一无二的代表了一个对象,可以通过哈希码找到该对象在内存的位置)
toString():进行String类型与其他类型数据连接时.(如System.out.println("Dog:"+d);),将自动调用toString()方法把其他类型转换为String类型 。
Object类的toString() 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@
”和此对象哈希码的无符号十六进制表示组成。
一般要在子类中重写这个方法
equals(Object obj):在Object类中,若两个对象的引用指向同一个对象,则返回true,否则返回false。
在String,Date等类中,若两个对象的引用指向同一个类的对象且属性相等时返回true,否则返回false
继承Object类后,一般要重写此方法。
“==”:用此运算符比较两个对象的引用,实际上是比较对象引用中存储的对象地址是否相同。
向上转型:子类对象转换为父类对象
向下转型:父类对象转换为子类对象
父类引用指向子类对象时,父类引用只能访问父类成员变量及成员方法。若子类重写了父类中的成员方法,则调用子类中已被重写过的成员方法。
abstract关键字:修饰类时表示抽象类,不能被实例化,必须被继承。
修饰方法时表示抽象方法,含有抽象方法的类必须被声明为抽象类。抽象方法只需要声明,不需要实现。但在继承的子类中必须被重写,或者子类继续声明为抽象类。
final关键字:修饰的变量的值不能改变
修饰的方法不能被重写
修饰的类不能被继承
interface关键字(接口):是一种特殊的抽象类。接口中的所有方法不需实现,并默认为public abstract 类型。接口中的变量默认为public static final类型。
一个类可以实现多个接口,接口也可以继承其它接口。
父类接口指向子类实现,父类接口只能访问父类成员变量及子类已实现的父类成员方法。