Think in Java 复用类(第7章) 读书笔记

第7章 复用类

1.组合语法

在新类中产生现有类的对象。由于新类是由现有类的对象组成的,所以这种方法称为组合。

 

2.继承语法

按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码。

除非已经明确从其他类中继承,否则就是隐式的从Object中继承。

+= 操作符被重载用来处理String对象,另一个是 +。

 

2.1初始化基类

当创建了一个子类的对象时,该对象中包含了基类的子对象,这个子对象被包装在子类对象内部。

Java会自动在子类的构造器中插入对基类的默认构造器的调用。但是如果基类没有默认构造器,就必须在子类构造器中显式的调用基类的带参构造器。

public class A {
    public A(int a){
        System.out.println(a);
    }
}

public class B extends A {
    public B(int a){
        super(a);//显式调用基类带参构造器
    }
}

 

3.名称屏蔽

Java不会屏蔽父类的同名方法,子类可以调用自己重载的方法。

public class Homer {
    char doh(char c){
        System.out.println("char:"+c);
        return c;
    }

    float doh(float f){
        System.out.println("float:"+f);
        return f;
    }
}

public class Milhouse {}

public class Bart extends Homer {
    void doh(Milhouse m){
        System.out.println("doh(Milhouse)");
    }
}

public class Hide {
    public static void main(String[] args) {
        Bart b = new Bart();

        b.doh('c');
        b.doh(new Milhouse());
        b.doh(1.3f);
        b.doh(1);
    }
}

//输出
//char:c
//doh(Milhouse)
//float:1.3
//float:1.0

重写与重载的区别:

方法签名:方法名称和参数类型。

重写:

    ①方法签名一样。参数列表必须一样,但是返回类型可以是父类方法返回类型的子类。

    ②权限子类不能小于父类。

    ③final、static方法不能被重写,但static方法可以被重新声明。

    ④子类抛出的检查异常不能比父类大。

    ⑤构造方法不能被重写。构造器其实是类的静态方法。

重载:

    ①有不同的参数列表。

    ②返回的类型可以相同。

    ③权限不作限制。

    ④抛出的异常不收限制。

 

4.final关键字

4.1final变量

4.1.1 final成员变量

①final修饰基本数据类型,会使其数值恒定不变,而且必须赋初值,可在构造器中或初始化块中赋值。

②修饰引用类型,会使其指向的引用不变即不能再指向另一个引用,但引用的对象可以修改,必须赋初值,可在构造器中或初始化块中赋值。

③被final修饰的变量不能被

/*
* 1所有的byte型. short型和char型将被提升到int型(例外: final修饰的short, char变量相加后不会被自动提升。)
* 2如果一个操作数是long形 计算结果就是long型;
* 3如果一个操作数是float型,计算结果就是float型;
* 4如果一个操作数是double型,计算结果就是double型;
*/

byte a = 1;
int b = 1;

byte in = a+b;//报错

final byte a = 1;
byte in = a + b;//不报错

4.1.2 final局部变量

①使用final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。

②给局部变量赋初始值时,只能一次,不能重复。

4.2final方法

final修饰的方法不能被继承。

类中所有的 private方法被隐式的指定为final,但是如果覆盖一个private方法编译器并不会报错。原因如下:

①覆盖只有在某方法是基类的接口的一部分的时候才会发生。

②如果方法是private,则不是基类的一部分。

 

4.3final类

将类定义为 final,以为这你对该类的设计永远不需要做任何改动,也不能有子类。

 

4.4final参数

方法体内不能修改参数的值。参数的值在方法体内是不能被修改的。

需要注意的是被匿名内部类访问的成员变量和参数需要加上final。原因见:匿名内部类访问的变量final修饰符问题

 

5.类的初始化与加载

类在初次使用时才会被初始化。初次使用有以下几种情况:

    ①new 关键字,但 A a = new A[2]这种并不会导致初始化,只是表示开辟空间。

    ②访问静态变量、方法,访问静态常量并不会导致初始化。

    ③对类进行反射操作如: Class.forName()。

类的加载:

    1.加载

    2.连接: ①验证 ②准备 ③解析

    3.初始化

类的加载是双亲委派机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值