继承与向上转型

前言

  • “为新的类提供方法”并不是继承这一特性中最为重要的方面,其最重要的方面是表现新的类和基类之间的关心
  • tune() 方法接受的是 Instrument 对象的引用,但是在下面的代码中却传入了一个 Wind 类型的引用。
  • Java对类型的检查非常严格,你一定会觉得奇怪。
  • 除非你认识到 Wind 是 Instrument 的导出类,一个方法接受的参数可以是参数本身的类型,也可以是参数本身类型的导出类型。
  • 例如 toString(Object o) 它接受的是一个 object 的类型,那么我们可以传入任意 Java 对象类型作为参数,因为所有的 Java 对象类型都是 object 类型的子类。
  • 这种动作被称为“向上转型”

基类

public class Instrument {
    public void play() {
    }

    public static void tune(Instrument instrument) {
        instrument.play();
    }
}

导出类

public class Wind extends Instrument {
    public static void main(String[] args) {
        Wind wind = new Wind();
        Instrument.tune(wind);
    }
}

构造方法调用重写方法

在 new 过程中,首先是初始化父类,父类构造方法调用 description(),description() 被子类重写了,就会调用子类的 description() 方法,子类方法打印 "Cat"。
像这样,在父类构造方法中调用可被子类重写的方法,是一种不好的实践,容易引起混淆,应该只调用 private 的方法。

public class Animal {
    public Animal() {
        description();
    }
    public void description() {
        System.out.println("Animal");
    }
}

public class Cat extends Animal {
    public Cat() {}
    
    @Override
    public void description() {
        System.out.println("Cat");
    }
}

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
    }
}

//output: "Cat"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,136评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,012评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,826评论 19 139
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 1,510评论 2 4
  • 每天三件事 1、在西塘玩开心 2、晚上听得到语音 3、收拾房间 小确幸 今天天气很好,很开心 感悟 新的一年,新的...
    Katrina程阅读 183评论 0 0

友情链接更多精彩内容