java基础总结篇(1)---复用类

105 阅读2分钟

本文已参加[新人创作礼]活动,一起开启掘金创作之路。

 复用类: 

  • 复用代码的类

一、复用类使用(有三种方式):

  1. 组合语法 : 将对象引用置于新类中即可.
  2. 继承 : 采用继承实现.
  3.  代理 : 想复用类的代码,但又不想暴露太多的内容.
//组合语法示例

class Soap {
    private String s;
    public Soap() {
        System.out.println("Soap()");
    }
}

public class Bath {
    private Soap castille;

    public Bath() {
        System.out.println("Inside Bath()");
        castille = new Soap();
    }

    public String toString() {
        return "castille=" + castille;
    }
}
//继承示例
//还是沿用上面的 Soap 方法
public class Bath extends  Soap{
    public Bath() {
        super();
        System.out.println("Inside Bath()");
    }
}
//代理示例
    
//定义接口
public class SpaceShipControls{
    void up(int velocity){}
    void down(int velocity){}
}

//实现接口的类
public class SpaceShip extends SpaceShipControls{
    private String name;
    public SpaceShip(String name){this.name = name;}
    public String toString(){return name;}
    public static void main(String[] args){
        SpaceShip protector = new SpaceShip(“NSEA Protector”);
        protector.up(100);
    }
}
    
//代理
public class SpaceShipDelegation{
    private String name;
    private SpaceShipControls controls = new SpaceShipControls();

    public SpaceShipDelegation(String name){
        this.name = name;
    }

    public void up(int velocity){
        controls.up(velocity);
    }

    public void down(int velocity){
        controls.down(velocity);
    }

    public static void main(String[] args){
        SpaceShipDelegation protector =  new SpaceShipDelegation(“NSEA protector”);
        protector.down(100);
    }
}

二、详细讲解

  1.  语法组合,没什么好讲的
  2.  代理,没什么好讲的
  3.  继承,讲一下

继承原理

继承原理.png

        通过看图我们知道,当子类继承父类,会继承父类中的方法表以及方法等。当子类执行父类代码的时候,会通过寻址,找到其父类的代码区,并执行其中的代码。         


备注

关于重写父类方法:

        1. 如果子类重写父类的方法(如图中C类重写父类中的A1、B1方法),重写的方法不是静态方法的话,一般都会在子类中覆盖父类的方法,并将该方法的指针指向新的地址。

        2. 子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说。(父类的静态方法不能被子类重写,即使你写一个跟父类相同名称的静态方法,也只是在子类中创建一个新的静态方法)。

        因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。