第4章 对象与类
1、预定义类
类之间的关系:聚合,依赖,继承
date等。
对象是类的实例
对象的克隆
Date d=new Date();
Date dd=d.clone();
dd=d;//对象在堆上,指向同一个对象
2、自定义类
class Employee {
//初始化以后不可改变 finale
private final String mName;
//所有类共享statci变量
private statci
int mNextID = 2;
//静态常量
private static final int PI = 3;
//静态方法 Employeer.get()
public staic get() {
}
private int mAge;
public Employee(String name, int age) {
this.mName = name;
mAge = age;
}
public String getName() {
return mName;
}
}
方法参数:
C++有按值传递和按照引用传递,java没有
方法不能改变基本类型数据;
方法可以改变一个对象的参数状态。
方法不能让对象参数引用另外一个对象,以下无法交换,a是原来的一份引用的拷贝。
void swap(Employee a,Employeeb ){
Employee temp=a;
a=b;
b=temp;
}
重载:
多个构造器调用另外一个构造器
this(XXX)
初始化块:创建对象的时候调用
对象析构:finalize,不建议使用
包:类似于命名空间
package com.test;
导入静态方法
import static java.s
3、文档注释
IDEAL生成注释:打/**回车会自动生成
第5章 继承
1、超类和子类
class Manager extends Employee {
public Manager(String name, int age) {
super(name,age);
}
}
super可以调用父类方法或者构造器。
多态,动态判断对象的类型。
final定义类和方法,阻止继承和覆写。
类型转换:
继承层次内转换,超类转子类使用instanceof检查。
抽象类:类似于虚函数
abstract class Person {
public abstract int getTemp();
}
修饰符:
priate:本类可见
public:所有类可见
protect:本包和子类可见
默认:本包可见
根类:Object
2、泛型数组
ArrayList<Employee> list=new ArrayList<>(100);
list.get(0);
包装器与装箱:每个基本类型对应一个类。
可变参数:
void tmp(double...tmp);
3、反射
1、意义
运行中分析类的能力
try { Class cl = Class.forName("Employee"); for(Filed f:cl.getDeclaredFields()){ System.out.println("type="+f.getType()+"name="+f.getName()); } }catch(Exception e){ e.printStackTrace(); }
第6章 接口与内部类
1、接口
接口只能包含方法声明以及常量。
接口与抽象类:
!JAVA不支持多重继承,C++支持。
abstract class Comp{ } class Employee extends Comp{ } //如下写法错误 class Employee extends Comp,Person //应该是 class Employee extends Person implements Comp
2、对象克隆
①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变量值。
3、内部类
定在在类内部,或者局部内部类定义在方法内部。
匿名内部类