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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高薇 中级黑马   /  2012-8-18 08:19  /  2256 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请教:接口中有一个特点是可以被多继承,原因是接口中定义了没有方法主体的一些抽象方法,如果以此类推的话,那抽象类中也定义抽象方法(在没有一般函数情况下),可不可以被多继承呢?
想知道其中的原因!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览
1、用abstract关键字来修饰一个类时,这个类叫抽象类;abstract来修饰一个方法时,
该方法是抽象方法。
2、含有抽象方法的类必须声明为抽象类,当一个类继承抽象类时,抽象类里面的抽象方法必须被重写。
3、抽象类不能被实例化。
4、抽象方法只需声明,而没有实现。。

抽象类是可以被多个类继承的,
类只能单继承,继承了一个,就不可以再继承其他的类,
当有接口和类的供我们选择的时候,我们应该优先选择实现接口来完成。
回复 使用道具 举报
刘圣伟 发表于 2012-8-18 08:34
1、用abstract关键字来修饰一个类时,这个类叫抽象类;abstract来修饰一个方法时,
该方法是抽象方法。
2、 ...

抽象类在没有方法主体时,可以多继承,是这样吗?
回复 使用道具 举报
肯定不可以,java只支持单继承。
一个类只能继承一个类,只要是类,就只能单继承。
不过可以实现多个接口。
回复 使用道具 举报
接口可以实现多继承、
回复 使用道具 举报
不可以,抽象单继承,抽象是可以有实体函数的,但是也可以全都抽象,当然也有全是实体函数的抽象类,但是无论怎么变化他们都是抽象类,他们是一类类,细分没有必要。  而接口肯定没有实体函数,所以可以对继承
回复 使用道具 举报
本帖最后由 刘圣伟 于 2012-8-18 11:02 编辑

class Test5{
    public static void main(String[] args){
    show();
    }
    public static void show(int...arr){
    System.out.println(arr.length);
    }
}
abstract class Student {
    private String age;
    private String name;

    public Student(String name,String age ){
        this.name = name;
        this.age = age ;
    }
   
}
class per extends Student{

    public per(String name, String age) {
        super(name, age);
        // TODO Auto-generated constructor stub
    }
   
}
class per2 extends Student{

    public per2(String name, String age) {
        super(name, age);
        // TODO Auto-generated constructor stub
    }
   
}


回复 使用道具 举报
高薇 发表于 2012-8-18 08:48
抽象类在没有方法主体时,可以多继承,是这样吗?

不能,java中类和类之间只支持单继承,不管有没有方法体。
要是已经继承过了,可以定义成接口,这样就可以继承一个类,然后再实现多个接口
回复 使用道具 举报
抽象类为什么不允许多继承?
    1,抽象类允许有实例变量。
    2,抽象类允许有非静态方法。
    如果一个子类继承的多个抽象类中拥有同名变量、方法时就会产生歧义,不知道该使用哪个父类中的变量、方法。
接口为什么允许多实现?
    因为以上缺点接口全部没有。
    1,接口没有实例变量,只有静态常量。
    2,接口没有实例方法(没有方法体),只有抽象方法。
    即使多个接口的静态变量、抽象方法同名,具体功能是调用实现接口的类实现的,静态变量直接用类名就可以了,这样就不会出现歧义。
综上,你懂的。
回复 使用道具 举报
只有接口可以多继承,抽象类是一个特殊类,Java语言规定的就是单继承,多实现的。
回复 使用道具 举报
是不可以的,不论抽象类里面有多少抽象方法,他还是一个“类”,而不是“接口”,你可以将抽象类中的方法和接口一样全部抽象并且也public,但是没有经过“interface”修饰他就不是“接口”,而JAVA中只有被称为“接口”的东西才能让对象多继承。
回复 使用道具 举报
抽象类也是类 所以只能单继承  而接口可以多实现
抽象类有构造方法,抽象类不能被实例化,抽象类中的构造方法供子类实例化调用
A:类与类的关系
是继承关系。类与类只能单继承,可以多重继承。
B:类和接口的关系
是实现关系。类可以多实现接口。
类在继承一个类的同时,可以实现多个接口。
C:接口和接口的关系
是继承关系。接口可以多继承接口。
D:类与接口的关系:
实现关系。是多实现,并且,类可以在继承一个类的基础上实现多个接口。
E:接口与接口的关系:
继承关系。是多继承。

java中的类不能多继承,因为存在着安全隐患。所以呢,java对多继承进行了改良。
java可以多实现。
java中的接口可以多继承。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马