黑马程序员技术交流社区
标题:
接口和类的问题
[打印本页]
作者:
黑马潘浩
时间:
2013-3-7 16:09
标题:
接口和类的问题
本帖最后由 黑马潘浩 于 2013-3-10 11:04 编辑
接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类?
作者:
李洪因
时间:
2013-3-7 16:28
本帖最后由 李洪因 于 2013-3-7 16:29 编辑
接口可以继承接口的:
接口和接口之间可以定义继承关系,并且接口之间允许实现多继承
public class AnimalText {
public static void main(String[] args) {
Animal a=new Dog();//实例化Dog
a.enjoy();
value v=new Dog();
v.valuable();
protect p=(protect)v;//对象转型
p.protectable();
}
}
abstract class Animal{ //定义一个抽象类Animal
public abstract void enjoy() ;
}
interface protect{ //定义一个接口
public void protectable();
}
interface value{
public void valuable();
}
<FONT color=red>interface hen extends value{ //定义一个继承hen的接口(实现接口对接口)
</FONT>public void print();
}
class Dog extends Animal implements protect,value{//通过实现多继承
@Override
public void valuable() { // 实现接口
System.out.print("50元");
}
@Override
public void protectable() {// 实现接口
System.out.print("不受保护");
}
public void enjoy(){ //重写抽象方法
System.out.print("动物");
}
}
class Hen implements hen{//实现接口对接口
public void print(){
System.out.print("好吃");
}
public void valuable(){
System.out.print("11");
}
}
复制代码
接口和抽象类中的所有抽象方法不能有具体实现,而应在它们的子类中实现所有的抽象方法(要有函数体,哪怕{ }里是空的),java的设计者可能为抽象方法的灵活性考虑,每个子类可根据自己的需要来实现抽象方法。
其实接口是抽象类的变体。
一般来说不会用抽象类去实现接口。因为能够定义在接口中的方法,一样能写在抽象类里,所以为什么需要去实现呢。但作为一个类,即使是抽象的,一旦实现了接口,就必要实现接口中的所有方法。但同时也要确保抽象类中存在抽象方法。
抽象类可以可继承实体类, 抽象类可以有一个实体的父类
作者:
lzw123451
时间:
2013-3-7 16:34
恩很好
我再补充一下下
有抽象方法的是抽象类
抽象类中 可以没有抽象方法(也就是说抽象类中的方法都实现了),这样可以避免创建对象
作者:
HM李帅
时间:
2013-3-7 23:36
除了最后一个其他的都是可以的
作者:
0.00
时间:
2013-3-7 23:43
抽象类都是父类了,哪还有父类给他继承啊
作者:
聂斌
时间:
2013-3-8 01:01
第一:抽象类是否可继承实体类?
答:抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数
其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
关键在于这答案里所说的“前提是实体类必须有明确的构造函数”一句,是什么意思。
一般学习者会写的简单试验代码:
class A{}
abstract class B extends A{}
结果完全正常,编译通过。似乎和“实体类必须有明确的构造函数”完全没有关系。
这个问题涉及到两个个基础知识:
1.
所有的class都必须有一个构造方法,如果你没有在代码里声明构造方法,系统会自动给你生成一个公有无参的构造方法。而只要你自己声明了一个构造方法,无论有参无参,私有公有,系统就不再帮你生成默认无参构造器了。
2.
所有的子类构造器都要求在第一行代码中调用父类构造器,如果不写,系统默认去调用父类的无参构造器。
所以,如果把系统默认配给的方法也算进去,class A{}的代码实际上是
class A{
public A(){}
}
B继承 A 的时候,则是
abstract class B extends A{
public B(){
super();
}
}
第二:接口是否可继承接口?
答:接口与接口之间存在多继承看代码,为什么能多继承因为接口都没方法体所以可以随便用无所谓
interface A
{
void methodA();
}
interface B
{
void methodB();
}
interface C extends B,A
{
void methodC();
}
class D implements C
{
public void methodA(){}
public void methodC(){}
public void methodB(){}
}
第三:.抽象类可以实现接口..比如java.util中的AbstractCollection类就是实现的Collection接口
接口是一个特殊的抽象类,这个抽象类所有的方法都是抽象方法。抽象方法不可以实现。
一个抽象类对抽象方法可有可无,实体方法也可有可无。
抽象类可以继承接口,可以定义接口中的方法为实体方法时就可以实现了。定义为抽象方法的话就需要子类实现,和接口类似。
作者:
amen0205
时间:
2013-3-8 01:49
0.00 发表于 2013-3-7 23:43
抽象类都是父类了,哪还有父类给他继承啊
所有没有父类的类 都继承了 Object
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2