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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丰亚彬 高级黑马   /  2012-6-1 16:01  /  2410 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个类对象实例化时,会调用父类的默认构造函数,那么如果这个类继承自抽象类呢,请问对象实例化时,对于父类的调用是怎样的呢?

评分

参与人数 1黑马币 +10 收起 理由
黄奕豪 + 10 鼓励一下,加油哦!!

查看全部评分

16 个回复

倒序浏览
abstract 抽象:为了描述一种规范和结构的思维
abstract 能修饰类和方法:
特点:
1、如果一个类中的方法是抽象的,那么这个方法不能有方法体(连"{}"都不允许存在),这个方法所在的类也必须是抽象的
2、如果一个类是抽象的,那么这个类中可以有不是抽象的方法
3、抽象类存在的目的就是为了描述功能结构规范,然后让其他类来继承,必须要重写父类中的抽象方法,如果只实现了部分抽象方法,那么这个子类也必须是抽象的
4、抽象类是不能实例化
回复 使用道具 举报
金鑫 发表于 2012-6-1 16:12
abstract 抽象:为了描述一种规范和结构的思维
abstract 能修饰类和方法:
特点:

额,哥们,你看看我的问题...我问的不是这个
回复 使用道具 举报
本帖最后由 袁錦泰 于 2012-6-1 16:24 编辑

也会调用父类的构造方法,但实例化时实例化的是子类对象.其实我并没有太理解你的问题,是不是你觉得继承抽象类与继承普通类的实例化过程自相矛盾?或者是什么?
回复 使用道具 举报
袁錦泰 发表于 2012-6-1 16:21
也会调用父类的构造方法,但实例化时实例化的是子类对象.

抽象类有构造方法吗?如果有那么不是能实例化对象嘛
回复 使用道具 举报
抽象类也有默认构造方法,如果一个类继承抽象类,他在实例化的时候会自动调用抽象类的隐式构造方法。
回复 使用道具 举报
本帖最后由 袁錦泰 于 2012-6-1 16:31 编辑

难道抽象类没有构造方法吗? 子类继承它后,当然会有构造方法呀。在实例化的时候是调用抽象类的构造方法,实例化其子类对象。这个东西是在多态之后讲的吧?
回复 使用道具 举报
袁錦泰 发表于 2012-6-1 16:28
难道抽象类没有构造方法吗? 子类继承它后,当然会有构造方法呀。在实例化的时候是调用抽象类的构造方法,实 ...

额,我是想问问抽象类如果有构造方法,那为什么不能实例化,是因为abstract关键字限定了吗
回复 使用道具 举报
抽象类一定有构造方法,你不写编译器帮你加的少年,因为子类的构造方法肯定会super(),接口没有构造方法偶
回复 使用道具 举报
马林贺 发表于 2012-6-1 16:36
抽象类一定有构造方法,你不写编译器帮你加的少年,因为子类的构造方法肯定会super(),接口没有构造方法偶
...

那么既然有,为什么不能实例化呀?是因为abstract强制限定了?

点评

我记着,在讲的时候是可以被多态实例化的,因为他的超类是 Object 你用多态看看  发表于 2012-6-1 16:48
回复 使用道具 举报
丰亚彬 发表于 2012-6-1 16:35
额,我是想问问抽象类如果有构造方法,那为什么不能实例化,是因为abstract关键字限定了吗 ...

其实你这问题提得挺好,我说实话,你这问题我不知道准确答案,我觉得是是abstract(抽象)关键字限定了.但是这个你得反过来想,抽象类具备构造方法,不考虑构造方法给谁用,你使用抽象类的构造方法建立抽象类的对象之后,还能做些什么?什么都做不了.他的构造方法是为其子类继承它后,按照其规则对自身进行实例化准备的,也就是多态.默认是隐式的,子类继承抽象类后也会出现隐式的super()语句;当然你也可以手动去修改为有参构造函数. 我知道的都告诉你了,这些估计你也都了解,实在不行就就上网找找,看看有没有这方面的信息.
回复 使用道具 举报
丰亚彬 发表于 2012-6-1 16:44
那么既然有,为什么不能实例化呀?是因为abstract强制限定了?

  我记错了,我刚测试了一下,也不能被多态实例   更正一下啊
回复 使用道具 举报
袁錦泰 发表于 2012-6-1 16:55
其实你这问题提得挺好,我说实话,你这问题我不知道准确答案,我觉得是是abstract(抽象)关键字限定了.但是这 ...

嗯好,谢谢了,嘿嘿,我在说一点哈~~
抽象类从代码角度是可以用的,因为里面不仅仅有抽象方法嘛。。
但是实际意义不大,哈哈
谢谢~~~
回复 使用道具 举报
丰亚彬 发表于 2012-6-1 16:59
嗯好,谢谢了,嘿嘿,我在说一点哈~~
抽象类从代码角度是可以用的,因为里面不仅仅有抽象方法嘛。。
但是 ...

没错,这就是和接口的不同. 加油吧.:handshake
回复 使用道具 举报
张晨 黑马帝 2012-6-1 19:02:24
15#
可能是楼主推测的原因吧,因为继承之后,原来抽象方法就要全部被重写,这个类被初始化才有点用处
回复 使用道具 举报
父类的方法也会得到调用
package junit;

public class Calculatortest {
        public static void main(String[] args) {
                new Ab();
        }
}

abstract class Abs{
        public Abs(){
                System.out.println("abs");
        }
       
        public void say(){
               
        }
       
        public abstract void choose();
}

class Ab extends Abs{
        public Ab(){
                System.out.println("ab");
        }

        @Override
        public void choose() {
                // TODO Auto-generated method stub
               
        }
}

结果是abs
ab
回复 使用道具 举报
当你初始化子类的时候,首先是调用了子类的构造函数,然后函数中默认的第一句代码是会先调用父类的默认构造函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马