1.动手实验:继承条件下的构造方法调用。

运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

结论:

通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

在继承时候,构造方法先调用上面的,再进行下面的。

packageyanzheng;

classGrandparent {

publicGrandparent() {

System.out.println("GrandParent Created.");

}

publicGrandparent(Stringstring) {

System.out.println("GrandParent Created.String:"+string);

}

}

classParentextendsGrandparent {

publicParent() {

//super("Hello.Grandparent.");

System.out.println("Parent Created");

//super("Hello.Grandparent.");

}

}

classChildextendsParent {

publicChild() {

System.out.println("Child Created");

}

}

public classTestInherits {

public static voidmain(Stringargs[]) {

Childc=newChild();

}

}

packageyanzheng;

classGrandparent {

publicGrandparent() {

System.out.println("GrandParent Created.");

}

publicGrandparent(Stringstring) {

System.out.println("GrandParent Created.String:"+string);

}

}

classParentextendsGrandparent {

publicParent() {

super("Hello.Grandparent.");

System.out.println("Parent Created");

//super("Hello.Grandparent.");

}

}

classChildextendsParent {

publicChild() {

System.out.println("Child Created");

}

}

public classTestInherits {

public static voidmain(Stringargs[]) {

Childc=newChild();

}

}

2.不允许继承的类

final class 类名{

}

(1).以final声明的方法不允许覆盖。

(2).以final声明的变量不允许更改。

(3).利用final,我们可以设计出一种特殊的“只读” 的“不可变类”。

何为“不可变的类”?

创建“不可变的类”的对象后,此对象的属性不可改,而且也无法从此类派生出新子类。String就是一个典型的例子。

不可变的“类”有何用?

&可以方便和安全地用于多线程环境中,

&访问它们可以不用加锁,因而能提供较高的性能。

不可变类的实例:Address.java

JDK中的实例:String

packageyanzheng;

//不允许继承的类  2015.11.10

public final classAddress

{

private finalStringdetail;

private finalStringpostCode;

//在构造方法里初始化两个实例属性

publicAddress()

{

this.detail="";

this.postCode="";

}

publicAddress(Stringdetail, StringpostCode)

{

this.detail=detail;

this.postCode=postCode;

}

//仅为两个实例属性提供getter方法

publicString getDetail()

{

return this.detail;

}

publicString getPostCode()

{

return this.postCode;

}

//重写equals方法,判断两个对象是否相等。

public booleanequals(Objectobj)

{

if(obj instanceofAddress)

{

Addressad= (Address)obj;

if(this.getDetail().equals(ad.getDetail()) &&this.getPostCode().equals(ad.getPostCode()))

{

return true;

}

}

return false;

}

public inthashCode()

{

return detail.hashCode() +postCode.hashCode();

}

}

3.参看ExplorationJDKSource.java示例

此示例中定义了一个类A,它没有任何成员:

class A { }

示例直接输出这个类所创建的对象

public static void main(String[] args)    {

System.out.println(new A());

}

我们得到了一个奇特的运行结果:

A@1c5f743

后面这一串奇怪的字符其实是hash值。

前面示例中,main方法实际上调用的是:

public void println(Object x),这一方法内部调用了String类的valueOf方法。

valueOf方法内部又调用Object.toString方法:

public String toString() {

return getClass().getName() +"@" +

Integer.toHexString(hashCode());

}

hashCode方法是本地方法,由JVM设计者实现:

public  native int hashCode();

4.神奇的“+”号。

我们来看一段代码(示例Fruit.java ):注意最后一句,一个字串和一个对象“相加”,前页的示例中,Fruit类覆盖了Object类的toString方法。

结论:

在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

5.接口知识。

面向对象语言为什么要引入“接口”?

Java不支持多继承,还可以实现多种功能。

Java中“接口”的语法特性。

定义一个接口,采用关键字interface,实现一个接口,采用关键字implements

接口的成员函数自动成为public的,数据成员自动成为 static和final的。

如果接口不声明为public的,则自动变为package。

一个类可以同时实现多个接口。

可以通过继承接口来扩充已有接口,并形成一个新的接口。

interface OneInterface {

void f1();

}

interface TwoInterface extends OneInterface {

void f2();

}

实现子接口的类,必须实现“父”“子”接口所定义的所有方法,才能被实例化(即new出一个对象)。

接口与抽象类的区别?

抽象类是一个不完全的类,而接口只是表明类应该具有哪些“外部”特征,不涉及任何实现细节。

接口基本上不具备继承的任何具体特点,它仅仅承诺了外界能够调用的方法。

一个类一次可以实现若干个接口,但一个类只能继承一个父类。

java继承和接口连接怎么用_继承与接口的使用相关推荐

  1. 【Java基础系列教程】第八章 Java面向对象详解(三)_抽象类、接口、内部类、深拷贝与浅拷贝

    一.JavaBean规范 1.1 什么是JavaBean JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中.特点是可序列化,提供无参构造器,提供getter方法和 ...

  2. 接口方法javadoc注释_继承Javadoc方法注释

    接口方法javadoc注释 尽管用于javadoc工具的JDK工具和实用程序页面通过实现和继承方法来描述Javadoc方法注释重用的规则,但是当实际上不需要使用{@inheritDoc}时,很容易不必 ...

  3. Java基础三个排序详解_继承粗解语法关键字分析

    集合存放数据的容器,存放的数据可以是基本类型也可以是引用类型,数据类型必须一致,存放数据的空间是连续的即地址连续,长度固定 声明数组变量 首先必须声明数组变量,才能在程序中使用数组.下面是声明数组变量 ...

  4. JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...

    抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...

  5. 连接没反应_显示器USB接口的作用是什么?为什么会没有反应?

    一般来说,台式机显示器是不会有USB接口的,只有主机上面才有.但其实也有例外,而这些例外的显示器USB接口是做什么用的呢?有用户表示显示器的USB接口用不了,插上U盘也没有反应.接下来小编就为大家介绍 ...

  6. hdmi接口有什么用_路由器USB接口有什么用 路由器USB接口作用介绍【详解】

    路由器USB接口有什么用?原来这样用!相信很多用户注意到无线路由器接口的改变,除了传统的WAN口和LAN口外,出现了1-2个USB接口.那么这个USB接口能够帮助我们解决什么问题,开拓什么样的新应用呢 ...

  7. python 多继承与super使用详解_继承中的MRO与super详解

    Python进阶-继承中的MRO与super 写在前面如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,super ...

  8. java中class.forname连接mysql数据库_数据库链接与 Class.forName()用法详解

    主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 ...

  9. java web tcp长连接超时时间_常用java web容器http长连接超时设置

    1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点:keepalive_timeout指的是web服务器发送完最后一个响应报文 ...

  10. java通过端口1433连接到主机_通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败.错误:"connect timed out.请验证连接属性.确保 ...

最新文章

  1. 【炫酷秀】仅用4行代码再现《黑客帝国》数字雨,可立即在终端实现!
  2. swagger error: Conflicting schemaIds: Duplicate schemaIds detected for types A and B
  3. cola-ui的使用
  4. HadoopSourceAnalyse --- Nodemanager Container request handler
  5. android+引用非+android+工程,[非原创]编译android C++工程找不到exception handle的解决办法...
  6. Opennms配置SNMP
  7. java + testng wsdl 测试_在测试中使用XPATH断言的策略
  8. 前端图表生成利器--ECharts推荐
  9. 在OBS中解决无法录制chrome的问题
  10. premiere导入视频没有声音怎么办?快速解决方法,几步就搞定
  11. zookeeper系列(二)实战master选举 1
  12. Ubuntu操作-11 双显卡
  13. 国内五大最贵的两字母域名
  14. 宜家开发中心东亚区完成了在中国的全新升级,实践“民主设计”
  15. 人脑的计算能力有多强?
  16. 光追渲染器开发记录:BVH加速结构构建与射线求交
  17. ttf格式字体怎么安装教程
  18. 建设智慧养殖系统需要什么设备
  19. 李开复谷歌最后告别:遭同事难题“拷问”(图)
  20. Eclipse使用(1)Eclipse的下载以及官网版本介绍

热门文章

  1. 《数据虚拟化:商务智能系统的数据架构与管理》一 1.8 数据虚拟化的不同实现...
  2. 使用API网关构建微服务
  3. MATLAB注释快捷键、绘图选项
  4. 重写ArrayAdapter
  5. 使用 MySQL C API 访问 MySQL — 示例
  6. 要些一个在win98下的socket服务程序,大家推荐一下用啥控件?Indy?
  7. 转载(Asp.net Core 中试使用ZKWeb.System.Drawing)
  8. HDU 2159 完全背包
  9. 《XHTML》pdf
  10. java 定义mysql树形菜单