文章标题
2017-10-24 00:07
218 查看
1 栈区分为数据栈和方法栈
2
3
/*
* 方法重写
* 需求:
* 当子类从父类继承的方法不能满足子类需求时,可以对方法进行重写
* 如:
* Dog类从Pet父类继承下来的showInfo()方法, 不能显示子类特有的属性isWarDog
* 方法重写规则:
* 1) 在子类中定义的方法必须和父类 中定义的方法签名一致(方法名和方法参数列表)
* 2) 方法返回值类型 ,如果不是引用类型, 子类方法的返回值类型必须和父类方法返回值类型一致;
* 如果是引用类型, 子类方法返回值类型可以和父类方法返回值类型一致, 也可以是父类方法返回值类型的子类型
* 3) 方法访问权限修饰符, 子类重写方法的访问权限 大于等于 父类方法访问权限
* 4) 如果父类方法没有异常抛出,子类重写的方法也不能抛出异常
* 如果父类方法抛出了异常, 子类抛出的异常可以是父类方法抛出的异常的子异常
*
* 说明:
* 是否重写成功, 可以通过@override注解来表示
*
* 方法的重写可以实现多态
*/
1静态成员不继承,不重写
2构造方法不继承
在子类的构造方法中,可以通过super()指定调用父类的哪个 构造方法
3/*
* 1) 在继承中, 先加载父类,再加载子类
* 2) 在通过子类创建对象时, 在子类构造方法执行之前,会先调用父类的构造方法
* 并且,默认调用父类的无参构造, 如果父类没有无参构造,系统报错
* 3) 在子类的构造方法中,可以通过super()显示的调用父类的哪个构造方法
*/
4 如果类没有使用public修饰, 就是非公共类, 就只能在当前包中使用
5//当垃圾回收器回收这个对象时,就会执行对象的finalize方法
//垃圾回收器什么时候回收这个对象,不确定,这个方法在什么时候执行就不确定
@Override
protected void finalize() throws Throwable {
System.out.println(“Person对象将要被回收”);
}
7/*
* 在重写toString()方法之前
* 输出内容:
* com.bjpowernode.day11.demo07.object.p2.Person@15db9742
* 当前对象的完整类名 @ p1变量的值对应的哈希码的十六进制形式
* 当前对象的完整类名 @ 堆中对象的引用的哈希码的十六进制形式
* 需求:
* 打印某个对象时,打印这个对象的各个字段值
* 分析:
* 1)在println()方法中,先把对象x转换为字符串,
* String s = String.valueOf(x);
* 2) 在String.valueOf()方法中,把x对象转换为为字符串
* public static String valueOf(Object obj) {
return (obj == null) ? “null” : obj.toString();
}
//如果对象不为null,调用对象的toString()方法
3) 对象的toString()是从Object类中继承的,在Object类中的toString()定义为:
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
返回的是 当前对象的类名 @ 当前对象的哈希码的十六进制形式
8//使用 == 比较两个对象是否相等时, 比较的是这两个引用是否指向堆中同一个对象
System.out.println( p1 == p2 ); //false
9 final修饰类
* final类不能被继承
* 如System/String等 类使用final修饰的, 不能有子类
1. final可以修饰成员变量
* final变量在定义的同时必须初始化
* final变量一旦初始化就不能修改
* 一般情况下,final常量也使用static修饰
2. final可以修饰成员方法
* final修饰实例方法, 表示这个方法不能被重写
* final修饰静态方法,在子类中也不允许定义重名的静态方法
* 一般情况下, 在子类中定义的静态方法名不要和父类中定义的静态方法名重名
1.内部类
* 在一个类的内部又定义了另外一个类
* 内部类根据定义位置分为成员内部类和局部内部类
* 在一个类体中定义的类称为成员内部类
* 在代码块中定义的内部类称为局部内部类
* 每个类编译之后 都会生成字节码文件
* 内部类编译之后生成的字节码文件名: 外部类名$内部类名.class
//在成员内部类中不能定义静态成员
2
3
/*
* 方法重写
* 需求:
* 当子类从父类继承的方法不能满足子类需求时,可以对方法进行重写
* 如:
* Dog类从Pet父类继承下来的showInfo()方法, 不能显示子类特有的属性isWarDog
* 方法重写规则:
* 1) 在子类中定义的方法必须和父类 中定义的方法签名一致(方法名和方法参数列表)
* 2) 方法返回值类型 ,如果不是引用类型, 子类方法的返回值类型必须和父类方法返回值类型一致;
* 如果是引用类型, 子类方法返回值类型可以和父类方法返回值类型一致, 也可以是父类方法返回值类型的子类型
* 3) 方法访问权限修饰符, 子类重写方法的访问权限 大于等于 父类方法访问权限
* 4) 如果父类方法没有异常抛出,子类重写的方法也不能抛出异常
* 如果父类方法抛出了异常, 子类抛出的异常可以是父类方法抛出的异常的子异常
*
* 说明:
* 是否重写成功, 可以通过@override注解来表示
*
* 方法的重写可以实现多态
*/
1静态成员不继承,不重写
2构造方法不继承
在子类的构造方法中,可以通过super()指定调用父类的哪个 构造方法
3/*
* 1) 在继承中, 先加载父类,再加载子类
* 2) 在通过子类创建对象时, 在子类构造方法执行之前,会先调用父类的构造方法
* 并且,默认调用父类的无参构造, 如果父类没有无参构造,系统报错
* 3) 在子类的构造方法中,可以通过super()显示的调用父类的哪个构造方法
*/
4 如果类没有使用public修饰, 就是非公共类, 就只能在当前包中使用
5//当垃圾回收器回收这个对象时,就会执行对象的finalize方法
//垃圾回收器什么时候回收这个对象,不确定,这个方法在什么时候执行就不确定
@Override
protected void finalize() throws Throwable {
System.out.println(“Person对象将要被回收”);
}
7/*
* 在重写toString()方法之前
* 输出内容:
* com.bjpowernode.day11.demo07.object.p2.Person@15db9742
* 当前对象的完整类名 @ p1变量的值对应的哈希码的十六进制形式
* 当前对象的完整类名 @ 堆中对象的引用的哈希码的十六进制形式
* 需求:
* 打印某个对象时,打印这个对象的各个字段值
* 分析:
* 1)在println()方法中,先把对象x转换为字符串,
* String s = String.valueOf(x);
* 2) 在String.valueOf()方法中,把x对象转换为为字符串
* public static String valueOf(Object obj) {
return (obj == null) ? “null” : obj.toString();
}
//如果对象不为null,调用对象的toString()方法
3) 对象的toString()是从Object类中继承的,在Object类中的toString()定义为:
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
返回的是 当前对象的类名 @ 当前对象的哈希码的十六进制形式
4) 如果想打印对象时,打印的是对象的字段值, 需要重写toString()方法 */
8//使用 == 比较两个对象是否相等时, 比较的是这两个引用是否指向堆中同一个对象
System.out.println( p1 == p2 ); //false
//比较两个对象中的内容是否一样, 可以使用equals()方法, 在Object类中,equals()依然比较的是两个对象的引用是否指向同一个对象 System.out.println( p1.equals(p2) ); //true
9 final修饰类
* final类不能被继承
* 如System/String等 类使用final修饰的, 不能有子类
1. final可以修饰成员变量
* final变量在定义的同时必须初始化
* final变量一旦初始化就不能修改
* 一般情况下,final常量也使用static修饰
2. final可以修饰成员方法
* final修饰实例方法, 表示这个方法不能被重写
* final修饰静态方法,在子类中也不允许定义重名的静态方法
* 一般情况下, 在子类中定义的静态方法名不要和父类中定义的静态方法名重名
1.内部类
* 在一个类的内部又定义了另外一个类
* 内部类根据定义位置分为成员内部类和局部内部类
* 在一个类体中定义的类称为成员内部类
* 在代码块中定义的内部类称为局部内部类
* 每个类编译之后 都会生成字节码文件
* 内部类编译之后生成的字节码文件名: 外部类名$内部类名.class
//在成员内部类中不能定义静态成员