ch7 复用

7.1 组合

将对象引用置于新类中。

package Cha7;
import static tools.Print.print;
class Soap{
    private String s;
    Soap(){
        print("Soap()");
        s = "Constructured";
    }
    public String toString(){
        return s;
    }
}
public class Bath {
    private String s1="Happy", s2="Happy",s3,s4;
    private Soap castille;
    private int i;
    private float toy;
    public Bath(){
        print("Inside Bath()");
        castille = new Soap();
        toy = 3.14f;
        s3 = "joy";
    }
    {i=47;}
    public String toString(){
        if(s4==null)
            s4 ="joy";
        return s1+"\n"+s2+"\n"+s3+"\n"+s4+"\n"+i+"\n"+toy+"\n"+castille;
    }

    public static void main(String[] args) {
        Bath b = new Bath();
        // 打印对象b时,会调用类的toString。
        print(b);
    }
}
/*
    Inside Bath()
    Soap()
    Happy
    Happy
    joy
    joy
    47
    3.14
    Constructured  
 */

7.2 继承

为了继承,一般规则,所有数据成员为private,所有方法为public

当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;

  
2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
  

3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

  
2.子类继承父类的方法
  
同样地,子类也并不是完全继承父类的所有方法。

  
1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;

  
2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  
3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

关于构造方法:见7.2.1节。

### 7.2.1 初始化基类

创建一个导出类对象时,该对象包含了一个基类的子对象。
对该基类子对象的初始化,是java自动在导出类的构造器中插入对基类构造器的调用。

1.基类构造器会调用基类构造方法。
2.没有显示调用就会调用无参构造方法。
3.基类不存在该构造方法,会出错。
package Cha7;
import static tools.Print.print;

class Art{
    Art(){print("Art constructor");}
}
class Drawing extends Art{
    Drawing(){
        print("Drawing constructor");
    }
}
public class Cartoon extends Drawing{
    public Cartoon(){
        print("Cartoon constructor");
    }

    public static void main(String[] args) {
        Cartoon x = new Cartoon();
    }
}
    //构造方法不继承

    /*Art constructor
    Drawing constructor
    Cartoon constructor*/

7.3 代理

新类中创建旧类私有成员变量,再在新类中提供public方法,方法中通过私有的成员调用方法。可以避免将旧类的所以成员变量和方法暴露。

7.4 结合使用组合和继承

7.6 protected 关键字

“就类用户而言,是private的,但对于任何继承于此类或其他任何位于一个包内的类来说,它却是可以访问的”。

7.7 向上转型

7.8 final 关键字

final 数据

static final 占据一段不能改变的储存空间。
final 基本类型,即 final int a = 1;必须定义时赋值。a的值不可改变。
final 对象引用。 final Integer a = new Integer(3); a指向这个引用后,无法再指向其他引用。可以对对象操作。

final 方法

锁定该方法,防止继承的覆盖。

private方法隐式指定为final

final 类

锁定类,不能继承。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值