Java编程思想学习笔记(七)

复用:1.组合 2.继承 3.代理
组合:has-a
继承:is-a
组合还是继承一个清晰的判断方法:是否需要从新类向基类进行向上转型

  • final

1. final +数据——final “不会改变的”
(1)基本数据类型
final+基本数据类型=常量 定义时必须赋值或者在构造函数里赋值(使用前总是被初始化)
static final+基本数据类型=编译器常量 全部用大写单词间用_隔开

(2)引用(包括数组,数组也是一个引用)
引用指向一个对象后无法在改变它指向另一个对象,但引用所指向对象的具体成员变量值是可以改变的。

private Value v1=new Value(11);//v1.i=11;
v1.i=13;//可以
v1=new Value(13);//不可以

(3)参数
无法在方法中更改参数值和参数引用所指向对象
void f(final int i ){i++;}//不能改变值
void g(final Value v){ v=new Value(3);}//不能改变引用

2.final+方法——“不会被覆盖”
子类在继承父类时,final 的方法会被继承下来,但是不能覆盖。
final和private

class First{
	private final void f() {
		System.out.println("First.f()");
	}
}
class Second extends First{
	//@Override     用来检查覆盖是否正确 如果存在Override则会报错
	public final void f(){
		//super.f();
		System.out.println("Second.f()");
	}
}
public class TestFinal {
    public static void main(String[] args) {
    	First first=new First();
    	//first.f();
    	Second second=new Second();
    	second.f();
    }
}

继承只是继承接口,private只对自己可见(相当于是一段内部代码),子类不继承,所以更谈不上覆盖,因此f只是同名的函数而已。
3.final +类——“禁止继承”
类被final 修饰后,类内的所有方法都被隐式的final,也可以在方法前加上final,但没意义。

  • 初始化顺序

第一次创建类的对象或者调用静态方法时,加载类;
初始化静态成员(先基类再子类);
当创建对象时,先分配空间,初始化所有成员变量;
调用构造函数(先基类后子类)

猜你喜欢

转载自blog.csdn.net/Irisohohoh/article/details/88670677