java 中的interface是否继承object
首先我们从C++说起, c++可以多继承。也就是一个类型 --- class,可以继承自2个以上的父类型。多继承导致一个问题,很多人知道。例如,如果类型B,类型C均继承自类型A。然后类型D继承自类型B和C。那么构造D的实例的时候,由于要调用父类型的构造方法,最终会调用两次A的构造方法。结果类型D的实例有两套祖父的数据,也就是外公和爷爷长的一模一样,以后使用的时候很麻烦。每次D要和祖父打交道,都要额外的区分到底是外公还是爷爷。 再说,内存里面出现两套一模一样的东西,一个用不上,还容易引起混乱,岂不是浪费,又麻烦。
所以,java就通过严格的单一继承规则解决了这个问题。.net当然也一样,单一集成是一个定律。那么有:
所有的类型 --- 只能继承自单一的类型;
其次,大家知道,从一个class派生的必然是另一个class。Object是一个class,如果interface继承自Object,那么interface必然是一个class。那么,如果一个类型实现了一个interface,再有一个基类class, 那么它们的根源都是Object, 也即是这个类的实例也像c++一样,存在上述的问题。 因此接口肯定不是继承自Object,否则就违反了单一继承的定律。
- Set<String> result = new HashSet<String>();
- for (Method m : Set.class.getMethods())
- result.add(m.getName());
- System.out.println(result);
打印结果为:[iterator, toArray, addAll, remove, equals, containsAll, hashCode, contains, add, size, clear, isEmpty, retainAll, removeAll]
确实不包含Object中的public类型方法,也证明了上述推断。
上文是我在网上看到的一种解释。
疑问:万物皆对象,JVM中似乎提到接口和object是有关系的。 其实我觉得这个是sun当初在构建Java语法时候的“语法”问题,暂时理解他们两者之间存在一种“特别”的关系。
java 中的interface是否继承object的更多相关文章
- 第五节:详细讲解Java中的接口与继承
前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- Java类是如何默认继承Object的
前言 学过Java的人都知道,Object是所有类的父类.但是你有没有这样的疑问,我并没有写extends Object,它是怎么默认继承Object的呢? 那么今天我们就来看看像Java这种依赖于虚 ...
- Java类是如何默认继承Object的?
原:https://juejin.im/post/5ca1e8ade51d454e6a300048 前言 学过Java的人都知道,Object是所有类的父类.但是你有没有这样的疑问,我并没有写exte ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- Java中interface是否继承Object类
首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B ...
- java中接口之间的继承
最近在读一些源码的时候突然发现了一个很神奇的东西,它的原始形态是这样的: 在这行代码中,BlockingDeque.BlockingQueue和Deque是三个接口.刚发现这个问题时,我是十分吃惊的, ...
- java中的interface
转载: Java不支持多重继承,即一个类只能有一个父类 为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口 接口是抽象方法和常量值定义的集合,是一种特殊的抽象类接口中只包含常量和方法的定 ...
- java中的接口与继承,接口的例子讲解
extends 继承类:implements 实现接口. 简单说: 1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承, 2.JAVA中不支持多重继 ...
随机推荐
- CSS制作环形进度条
参考来源 <Radial progress indicator using CSS>,该文核心是用纯CSS来做一个环形的进度条.纯css的意思就是连百分比这种数字,都是css生成的.文章作 ...
- 基于webpack的react开发环境搭建新手教程
最近学习react-webpack项目搭建,找到一篇我认为不错的博客,跟着学习了一番,写得很详细很好,本篇博客纯属记录总结,要看更详细的搭建过程及解析,请戳: 基于webpack的React项目搭建( ...
- linux中mysql配置文件和jdk环境变量
mysql配置文件 [client]default-character-set = utf8mb4 [mysql]socket = /var/lib/mysql/mysql.sockdefault-c ...
- C语言中sizeof、strlen函数的部分理解
一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...
- 保卫"木叶",从火影剧情看网站攻防的演变
精彩故事即将上演,敬请期待 一.下忍考试 关键词:内鬼.已知攻击.后门 二.佩恩入侵 关键词:未知攻击.零日漏洞 三.忍界大战 关键词:CC攻击.批量注册.模拟攻击 -- 时间过去很久,火影篇太多情节 ...
- 货币转换 I
描述 人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中: 人民币和美元间汇率固定为:1美元 = 6.78人民币. 程序可以接受人民币或美元输入,转换为美元或人民币输出.人民币 ...
- c语言题库---- 函数
---恢复内容开始--- 1.编写一个函数,功能为返回两个int类型参数的最大的值 #include <stdio.h>int FindMax( int a, int b); int ma ...
- java基础(三):反射、反序列化破解单列模式和解决方式
单例模式指的是一个类只有一个对象,通过一些措施达到达到这个目的.但是反射和反序列化可以获得多个不同的对象. 先简单的认识一下单例模式 一:单例模式 通过私有构造器,声明一个该类的静态对象成员,提供一个 ...
- sql server 与 sql server compact 互相数据导入
从SQL Server 导出数据到 Sql Compact 使用 Sql Server Compact Tool box 从SQL Server Comapct 导出数据到 Sql Server 使 ...
- MySQL 数据表操作
MySQL 数据表操作 创建MySQL数据表需要以下信息: -表名: -表字段名: -定义每个表字段: 一.创建数据表 1)mysql> create table table_name (c ...