java继承和接口连接怎么用_继承与接口的使用
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继承和接口连接怎么用_继承与接口的使用相关推荐
- 【Java基础系列教程】第八章 Java面向对象详解(三)_抽象类、接口、内部类、深拷贝与浅拷贝
一.JavaBean规范 1.1 什么是JavaBean JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中.特点是可序列化,提供无参构造器,提供getter方法和 ...
- 接口方法javadoc注释_继承Javadoc方法注释
接口方法javadoc注释 尽管用于javadoc工具的JDK工具和实用程序页面通过实现和继承方法来描述Javadoc方法注释重用的规则,但是当实际上不需要使用{@inheritDoc}时,很容易不必 ...
- Java基础三个排序详解_继承粗解语法关键字分析
集合存放数据的容器,存放的数据可以是基本类型也可以是引用类型,数据类型必须一致,存放数据的空间是连续的即地址连续,长度固定 声明数组变量 首先必须声明数组变量,才能在程序中使用数组.下面是声明数组变量 ...
- JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...
抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...
- 连接没反应_显示器USB接口的作用是什么?为什么会没有反应?
一般来说,台式机显示器是不会有USB接口的,只有主机上面才有.但其实也有例外,而这些例外的显示器USB接口是做什么用的呢?有用户表示显示器的USB接口用不了,插上U盘也没有反应.接下来小编就为大家介绍 ...
- hdmi接口有什么用_路由器USB接口有什么用 路由器USB接口作用介绍【详解】
路由器USB接口有什么用?原来这样用!相信很多用户注意到无线路由器接口的改变,除了传统的WAN口和LAN口外,出现了1-2个USB接口.那么这个USB接口能够帮助我们解决什么问题,开拓什么样的新应用呢 ...
- python 多继承与super使用详解_继承中的MRO与super详解
Python进阶-继承中的MRO与super 写在前面如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,super ...
- java中class.forname连接mysql数据库_数据库链接与 Class.forName()用法详解
主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 ...
- java web tcp长连接超时时间_常用java web容器http长连接超时设置
1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点:keepalive_timeout指的是web服务器发送完最后一个响应报文 ...
- java通过端口1433连接到主机_通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败.错误:"connect timed out.请验证连接属性.确保 ...
最新文章
- 【炫酷秀】仅用4行代码再现《黑客帝国》数字雨,可立即在终端实现!
- swagger error: Conflicting schemaIds: Duplicate schemaIds detected for types A and B
- cola-ui的使用
- HadoopSourceAnalyse --- Nodemanager Container request handler
- android+引用非+android+工程,[非原创]编译android C++工程找不到exception handle的解决办法...
- Opennms配置SNMP
- java + testng wsdl 测试_在测试中使用XPATH断言的策略
- 前端图表生成利器--ECharts推荐
- 在OBS中解决无法录制chrome的问题
- premiere导入视频没有声音怎么办?快速解决方法,几步就搞定
- zookeeper系列(二)实战master选举 1
- Ubuntu操作-11 双显卡
- 国内五大最贵的两字母域名
- 宜家开发中心东亚区完成了在中国的全新升级,实践“民主设计”
- 人脑的计算能力有多强?
- 光追渲染器开发记录:BVH加速结构构建与射线求交
- ttf格式字体怎么安装教程
- 建设智慧养殖系统需要什么设备
- 李开复谷歌最后告别:遭同事难题“拷问”(图)
- Eclipse使用(1)Eclipse的下载以及官网版本介绍