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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 抽烟男孩 中级黑马   /  2013-4-4 09:01  /  1194 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 抽烟男孩 于 2013-4-4 14:39 编辑

我定义了两个类Animal类Culture类,Person类要实现两个类但明显不能全部继承
我尝试在定义一个接口 Civilization继承Culture类之后 让Person类实现它。但失败啦!!
  1. class Animal{
  2. public void eat(){System.out.println("I want to eat");}
  3. public void sleep(){System.out.println("I want to sleep");}
  4. private void die(){System.out.println("I maybe to die");}
  5. }
  6. class Culture {
  7. public void think(){System.out.println("I can think");}
  8. public void say(){System.out.println("I can speak");}
  9. }

  10. interface Civilization extends Culture{
  11. }
  12. public class Person extends Animal implements Civilization{
  13. public void wareness(){System.out.println("I know what is love");}
  14. public static void main(String[] args){
  15. Person ren=new Person();
  16. ren.wareness();
  17. ren.eat();
  18. ren.say();
  19. }
  20. }
复制代码
我必须把Culture类的方法在接口Civilization 中重写,再在Person类实现它吗?那样好麻烦啊,拜托大神实现这个多继承。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

正序浏览
本帖最后由 邓宫财 于 2013-4-4 10:30 编辑

接口interface和抽象类abstract的区别。
接口是一个纯抽象的类,只能定义方法和常量,因为jdk1.5新特性有了枚举enum之后,使用接口只常量的行为比较少见和用处不大了。
抽象类是为了让子类有不同实现而定义抽象方法,不知道子类的行为。

java中抛弃了C++中的多继承性,因为很混乱。java中可以使用接口来变相实现多继承。

还有就是接口只能继承接口不能继承类
  1. interface Animal{
  2.                 public void eat();
  3.                 public void sleep();
  4.                 public void die();
  5.         }
  6.         interface Culture {
  7.                 public void think();
  8.                 public void say();
  9.         }

  10. //interface Civilization extends Animal,Culture{
  11. //}
  12.         class Person implements Animal,Culture{

  13.         @Override
  14.         public void think() {
  15.         }

  16.         @Override
  17.         public void say() {
  18.         }

  19.         @Override
  20.         public void eat() {
  21.         }

  22.         @Override
  23.         public void sleep() {
  24.         }

  25.         @Override
  26.         public void die() {
  27.         }
  28.         }
复制代码
回复 使用道具 举报
首先你要明白接口也是抽象类的一种,只是修饰符不一样,接口比抽象类更抽象,以至于里面的方法全都是抽象的,并且是public的,你要继承接口必须实现接口里面的所有的方法,否则会出现错误。
解决方法
java是不支持多继承的,你可以用class Culture去继承class Animal,然后你在class Person去继承class Culture
你想要什么方法去复写你想要的,不想复写,就用父类的

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
搞清接口和抽象类的特性和作用!不管麻烦不麻烦!都必须按照人家规则来写!
回复 使用道具 举报
interface Civilization extends Culture{
}


这句混淆了.



接口里面需要定义抽象方法,实现后,子类必须全部覆盖父类中,或者接口中的抽象方法.





class Animal{
public void eat(){System.out.println("I want to eat");}
public void sleep(){System.out.println("I want to sleep");}
private void die(){System.out.println("I maybe to die");}
}
class Culture {
public void think(){System.out.println("I can think");}
public void say(){System.out.println("I can speak");}
}

interface Civilization {
public abstract void wareness(){System.out.println("I know what is love");
}
public class Person extends Animal implements Civilization{
}
public static void main(String[] args){
Person ren=new Person();
ren.wareness();
ren.eat();
ren.say();
}
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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