您的位置:首页 > 其它

文章标题

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());

}

返回的是 当前对象的类名 @ 当前对象的哈希码的十六进制形式

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

//在成员内部类中不能定义静态成员
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: