您的位置:首页 > 编程语言 > Java开发

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

2019-03-19 19:33 120 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Irisohohoh/article/details/88670677

复用: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,但没意义。

  • 初始化顺序

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: