首页 > 试题广场 >

抽象类和接口的区别,以下说法错误的是

[单选题]
JDK1.8版本之前,抽象类和接口的区别,以下说法错误的是
  • 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
  • abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
  • 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。
  • abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"has-a"关系,interface表示的是"is-a"关系。
is-a:继承关系 has-a:从属关系 like-a:组合关系
发表于 2019-08-21 16:22:24 回复(66)
D项: abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
发表于 2019-08-16 10:55:20 回复(25)
1)接口可以继承接口,而且可以继承多个接口,但是不能实现接口,因为接口中的方法全部是抽象的,无法实现;
另外,如果是Java 7以及以前的版本,那么接口中可以包含的内容有:1. 常量;2. 抽象方法
如果是Java 8,还可以额外包含有:3. 默认方法;4. 静态方法
如果是Java 9,还可以额外包含有:5. 私有方法
2)普通类可以实现接口,并且可以实现多个接口,但是只能继承一个类,这个类可以是抽象类也可以是普通类,如果继承抽象类,必须实现抽象类中的所有抽象方法,否则这个普通类必须设置为抽象类;

3)抽象类可以实现接口,可以继承具体类,可以继承抽象类,也可以继承有构造器的实体类。
抽象类中可以有静态main方法;抽象类里可以没有抽象方法,没有抽象方法的抽象类就是不想让别人实例化它
另外,抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super(参数列表)调用抽象类中的构造方法,可以用于实例化抽象类的字段。

下面总结常见的抽象类与接口的区别:
1)抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象;
2)接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现(java8中 接口可以有实现方法 使用default修饰);
3)接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量;
4)抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类;
5)抽象方法要被实现,所以不能是静态static的,也不能是私有private的,也不能被final修饰(试想一下,静态方法可以被类名直接调用,而类名直接调用一个没有实现的抽象方法没有意义)。
总结得比较杂乱,见谅!
发表于 2020-03-31 01:29:42 回复(19)
根据英文直译也可以看出,A is-a B:A是一个B,表示A是B的子类,这样A才能称作是一个B,A like-a B:A好像是一个B,表示A实现了B这个接口,A has-a B:A有一个B,表示A是B的父类,这样才能称作A有一个B
发表于 2020-04-29 20:50:06 回复(1)
A jdk1.9后方法可以声明为private;
C jdk1.8后接口可以声明staitc 和default带方法体方法。
发表于 2019-10-29 10:10:00 回复(4)
(1)is-a:继承关系;比如羊和绵羊;这种事物(绵羊)是那种事物(羊)中的一个种类;如果一个类继承了另外一个类,这两个类的关系是is-a的关系
(2)has-a:从属 关系;比如羊和羊身上的羊毛;这种事物(羊毛)隶属于那种事物(绵羊),是它的一个部分、部件。如果一个类实现了一个接口类,这个类必须实现接口类的所有方法。这两个类的关系是has-a的关系。
(3)is-like-a:组合关系:这个和is-a的区别是:A类继承了B类,如果A类只有B类方法,那么就是is-a;如果在is-a的基础上,A类还添加了自己的方法,那么就是is-like-a;
发表于 2021-01-05 08:54:56 回复(0)
A选项补充一下,在JDK9及其以后,接口可以含有私有方法,但是只能在接口里面使用
编辑于 2020-06-23 19:37:14 回复(0)
  • 抽象类表示的是 is-a 关系;
  • 接口表示的是 like-a 关系;
发表于 2020-08-10 11:50:34 回复(0)
🐴
发表于 2022-03-01 10:47:00 回复(0)
is a: A is a B A是B的子类。继承关系 has a: A has a B。B是A的组成部分。 从属关系 like a: A like a B。B是A的接口。组合关系
发表于 2022-01-03 16:55:04 回复(0)
is-a:接口中有的方法,类中必须实现
interface A{
    void method;
}
class B implements A{
    @Override
    public void method(){
        
    }
}
is-like-a:接口中有的方法,类中必须实现,并且,类中也有自
己的方法
interface A{
    void method;
}
class B implements A{
    @Override
    public void method(){
        
    }
    public void method1(){
        
    }
}
has-a:一个类作为另一类的属性使用
class A{
    
}
class B{
    private B b;
}


发表于 2022-05-29 16:47:56 回复(0)
has-a,从属关系, 如果A has a B ,那么 B 就是A的一部分;
is-a,继承关系,如果A is a B, 那么A继承B, B是父类,A是子类;
like-a,组合部分,如果 A like a B,那么B是A的接口。
编辑于 2022-04-11 09:55:53 回复(0)
继承is-a:代表特殊与一般的关系,子类有些特殊的字段,而父类有普通的字段; 聚合has-a:一个对象包含着某些属性,接口实现关系;
编辑于 2021-11-17 09:10:43 回复(0)
抽象类表示的是 is-a 关系; 接口表示的是 like-a 关系;
发表于 2021-11-02 20:26:51 回复(0)
is a表示继承关系,谁是一个谁的关系,这样就是继承了他,拥有了它的共性性质 继承 has a表示从属关系,比如某个机器有某个部件,这样就有了它的特征,用于区分不同机器 多态 like a一般是组合关系,也就是兄弟关系,需要继承和实现,既有了特征又有了共性,和兄弟关系差不多
发表于 2021-05-11 09:46:13 回复(0)
抽象类:is-a(抽象类也是类) 接口:like-a
发表于 2019-09-16 11:10:41 回复(0)
A选项
1.接口中不能有私有方法和私有变量


2.抽象类是可以有私有方法和私有变量的



B选项:
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。
2.一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

C选项:
在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法



在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的)

D选项:
接口:has-a,从属关系, 如果A has a B ,那么 B 就是A的一部分;
继承:is-a,继承关系,如果A is a B, 那么A继承B, B是父类,A是子类;
like-a,组合部分,如果 A like a B,那么B是A的接口。

发表于 2022-09-06 22:53:56 回复(0)
.8之后可以定义有方法体的方法,但必须用static和default修饰
发表于 2019-10-16 17:56:48 回复(0)
抽象类是is a理解为就是一个 接口是has a理解为有一个这样的
发表于 2024-02-14 01:46:35 回复(0)
mark
发表于 2023-11-09 08:21:32 回复(0)