A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德云 金牌黑马   /  2011-12-5 15:55  /  7825 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德云 于 2011-12-5 20:55 编辑

不能继承的是类是那些用final关键字修饰的类。一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,在jdk中System,String,StringBuffer等都是基本类型。来自张老师回答!
为什么我继承非fianl修饰的类,也会编译错误呢?
例如:


评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

11 个回复

倒序浏览
t_mac 黑马帝 2011-12-5 16:19:00
沙发
查了一下API 该方法没有构造函数,子类无法继承,而且这个类没有继承的必要,它所有的方法都是static的,你要用直接用类名调就是了
回复 使用道具 举报
因为Arrays这个类的默认构造方法是私有的
private Arrays() {
}
同时,这类的所有方法都是静态的,它是一个工具类,方便我们对一些数组和集合进行操作。
回复 使用道具 举报
因为Arrays这个类的默认构造方法是私有的
private Arrays() {
}
同时,这类的所有方法都是静态的,它是一个工具类,方便我们对一些数组和集合进行操作。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
t_mac 发表于 2011-12-5 16:19
查了一下API 该方法没有构造函数,子类无法继承,而且这个类没有继承的必要,它所有的方法都是static的,你 ...

我也想知道,“Arrays类为什么不使用final关键字修饰,而采取不定义构造函数的做法?”
回复 使用道具 举报
t_mac 黑马帝 2011-12-5 17:25:21
地板
monghuan 发表于 2011-12-5 16:28
我也想知道,“Arrays类为什么不使用final关键字修饰,而采取不定义构造函数的做法?” ...

因为Arrays 定义了一个数组, final修饰后只能初始化的时候赋值,其他时间是不能改变的,你要知道你定义的数组是用来增删改查的,你给它弄个final就没有多大意义了
回复 使用道具 举报
本帖最后由 王德云 于 2011-12-5 17:29 编辑
t_mac 发表于 2011-12-5 16:19
查了一下API 该方法没有构造函数,子类无法继承,而且这个类没有继承的必要,它所有的方法都是static的,你 ...


谢谢解答!
那意思是说,没有构造函数就不能继承吗。
我只是拿这个来举例,java.util包中差不多都不能继承.
我的意思,是Java类中到底哪些类是不能被继承?
回复 使用道具 举报
t_mac 黑马帝 2011-12-5 17:55:16
8#
王德云 发表于 2011-12-5 17:28
谢谢解答!
那意思是说,没有构造函数就不能继承吗。
我只是拿这个来举例,java.util包中差不多都不能继承 ...

不好意思,刚才藤椅上那同学说对了,它不是没有构造方法,而是它是私有的
private Arrays() {
}
没有构造方法的类也可以被继承
回复 使用道具 举报
t_mac 黑马帝 2011-12-5 18:00:25
9#
monghuan 发表于 2011-12-5 16:28
我也想知道,“Arrays类为什么不使用final关键字修饰,而采取不定义构造函数的做法?” ...

不好意思,刚才说错了,Arrays类有自己的构造方法private Arrays() {
}   因为是私有,所以不能被继承
而没有构造方法的类依然是可以被继承的
回复 使用道具 举报
你可以先查一下API文档,第一,Array没有构造方法,第二,此类用final修饰,所以不能继承。
至于java中的不能被继承的类,没必要都知道,也不好记,先知道常用的,至于其他的碰见了就把它搞定。
还有,一般而言,一个类不能被继承,八成就被final修饰了。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
段波 黑马帝 2011-12-5 18:36:25
11#
public class Arrays {
    // Suppresses default constructor, ensuring non-instantiability.
    private Arrays() {
    }
在源码中可以看到Arrays 构造方法是私有的,对外是不可见的,无法被继承。当一个类被final修饰或构造方法私有则无法被继承。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
fly51888 黑马帝 2011-12-5 20:39:44
12#
不能被继承的类有两类,一类是含final修饰符的。还有一种是父类中含有private权限的构造函数。
如下代码就不能被继承。
public class App extends Person{

        public static void main(String[] args) {
       
        }
}

class Person{
        private  Person(){
               
        }
}

因为私有构造函数是不可见的,所以既不能被继承,也不能直接实例化。
查看Arrays源代码就可以看到含有一个私有构造函数,所以Arrays不能被继承。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马