前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java--类和对象之组合和继承

Java--类和对象之组合和继承

作者头像
SuperHeroes
发布2018-05-22 16:14:13
1K0
发布2018-05-22 16:14:13
举报
文章被收录于专栏:云霄雨霁云霄雨霁

上一篇:类和对象之初始化和清除

类的组合的实现很简单,只需要在新类中置入对象句柄即可:

代码语言:javascript
复制
class Door{
    //字段和方法
}
class Wheel{
    //字段和方法
}
public class Car{
    Door d = new Door();
    wheel w = new wheel();
    //其他字段和方法
}

类的继承需要使用关键字extends. 创建一个类时肯定会使用继承,因为每个类都是继承自根类Object. 

代码语言:javascript
复制
class animal{
    int year;
    void play(){
        System.out.println("play");
    }
}
class dog extends animal{
    void run{
        System.out.println("run");
    }
}

继承中衍生类的初始化问题

  1. 衍生类的构造器会自动调用基础类的无参构造器进行初始化;但如果你为基础类写了带参构造器而没有写无参构造器,又没有在衍生类的构造器中显式调用基础类的带参构造器,就会出错。
  2. 衍生类的构造器中要首先设置对基础类的构造器的调用,这意味着在它之前不能出现任何东西。这种设计能够保证基础类总是能在衍生类调用它之前得到正确的初始化。

继承中方法名的隐藏问题

有一个方法名被“过载”使用多次,在衍生类里对那个方法名的重新定义就不会隐藏任何基础类的版本。所以无论方法在这一级还是在一个基础类中定义,过载都会生效(和C++不同)。效果如下:

组合 or 继承?

其实这涉及到设计模式的问题----组合模式。如果一个问题可以描述成整体和部分的关系组合模式是最合适的,比如上面的汽车类和车门、轮子、发动机类之间的关系。而继承则适用于属于关系,如上面的动物类和狗类、猫类之间的关系。

因为组合有着极大的简洁性和灵活性,所以一般情况优先考虑利用组合。有一种情况必须使用继承--上溯造型

上溯造型:取得 一个对象句柄,并将其作为基础类型句柄使用。

继承的一个好处是它支持“累积开发”,允许我们引入新的代码,同时不会为现有代码造成错误。这样可将 新错误隔离到新代码里。

final关键字:

Java中用final关键字来声明某个东西不能被改变。对于基本数据类型,final 会将值变成一个常数;但对于对象句柄,final 会将句柄变成一个常数。进行声明时,必须将句柄初始化到一个具体的对象。而且永远不能将句柄变成指向另一个对象。然而,对象本身是可以修改的。

final参数:方法的参数可以设置为final,这意味着在这个个方法的内部,我们不能改变参数句柄。

final方法:第一是方法“上锁”,防止任何继承类改变它的本来含义。第二是程序执行的效率。

只要编译器发现一个final 方法调用,就会忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理)。相反,它会用方法主体内实际代码的一个副本来替换方法调用。这 样做可避免方法调用时的系统开销。当然,若方法体积太大,那么程序也会变得雍肿,可能受到到不到嵌入代码所带来的任何性能提升。Java 编译器能自动侦测这些情况,并颇为“明智”地决定是否嵌入一个 final 方法。然而,最好还是不要完全相信编译器能正确地作出所 有判断。通常,只有在方法的代码量非常少,或者想明确禁止方法被覆盖的时候,才应考虑将一个方法设为 final。 类内所有private 方法都自动成为final。

final类:将类定义成 final 后,结果只是禁止进行继承——没有更多的限制。然而,由于它禁止了继承,所以一个 final 类中的所有方法都默认为 final。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档