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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄诗宾 高级黑马   /  2013-3-27 19:06  /  3497 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田磊阳 于 2013-3-27 20:22 编辑

都来19了 18都没人回答了 问题如下:

java支持单继承,多层继承。
字面意思理解是一个类只能被继承一次 如下
class a(){}
class b extends a(){}
class c extends b(){}
b继承a然后c在继承b

但为啥我看毕老师视频里一个抽象类被继承了多次?
是不是只要a为抽象类abstract  或者a类里有抽象方法
那么类b和类c就可以同时继承a了?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1 问题很好啊,继续努力,加油

查看全部评分

19 个回复

倒序浏览
不是哦,只要类不被final修饰就能被继承了,一个类可以被几个子类继承
比如person类,学生类可以继承person类,同时工人类也可以继承person类、农民类也可以继承person类。
继承只能单继承,即一个子类只能继承一个父类,如一个学生类如果继承类person类就不能再继承生物类了。
父类可以被子类继承,子类可以被子类的子类继承。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1 解释的很好

查看全部评分

回复 使用道具 举报
继承只能单继承,接口可以多实现,接口与接口直接可以多继承!你是不是把接口看成抽象类了?因为接口里全是抽象方法!
回复 使用道具 举报
丘凤光 发表于 2013-3-27 19:15
不是哦,只要类不被final修饰就能被继承了,一个类可以被几个子类继承
比如person类,学生类可以继承person ...

哦 例如A为父类  B继承A C继承A D继承A是这样?
我以为一个父类只能被继承一次
回复 使用道具 举报
抽象类中的方法没有方法体所以可以实现多继承。
回复 使用道具 举报
抽象类中的方法没有方法体所以可以实现多继承。
回复 使用道具 举报
是的,如果a是抽象类,b.c可以同时继承它,就好比一个父亲有多个孩子,而一个孩子只能有一个父亲。

给你写了一个例子,你看看。
  1. Java抽象类应用示例程序Test.java 如下:

  2. public abstract class Shapes {
  3.     public int x, y;
  4.     public int width, height;
  5.     public Shapes(int x, int y, int width, int height) {
  6.        this.x = x;
  7.        this.y = y;
  8.        this.width = width;
  9.        this.height = height;
  10.     }
  11.     abstract double getArea();
  12.     abstract double getPerimeter();
  13. }


  14. public class Circle extends Shapes {
  15.     public double r;
  16.     public double getArea() {
  17.        return (r * r * Math.PI);
  18.     }
  19.     public double getPerimeter() {
  20.        return (2 * Math.PI * r);
  21.     }
  22.     public Circle(int x, int y, int width, int heigh) {
  23.        super(x, y, width, heigh);
  24.        r = (double) width / 2.0;
  25.     }
  26. }
  27. public class Square extends Shapes {
  28.     public double getArea() {
  29.        return (width * height);
  30.     }
  31.     public double getPerimeter() {
  32.        return (2 * width + 2 * height);
  33.     }
  34.     public Square(int x, int y, int width, int height) {
  35.        super(x, y, width, height);
  36.     }
  37. }
  38. public class Triangle extends Shapes {
  39.     public double c;
  40.     public double getArea() {
  41.        return (0.5 * width * height);
  42.     }
  43.     public double getPerimeter() {
  44.        return (width + height + c);
  45.     }
  46.     public Triangle(int x, int y, int base, int height) {
  47.        super(x, y, base, height);
  48.        c = Math.sqrt(width * width + height * height);
  49.     }
  50. }
  51. import java.applet.Applet;
  52. import java.awt.Graphics;


  53. public class Test extends Applet {
  54.     Square Box = new Square(5, 15, 25, 25);
  55.     Triangle tri = new Triangle(5, 50, 8, 4);
  56.     Circle Oval = new Circle(5, 90, 25, 25);


  57.     public void paint(Graphics g) {
  58.        g.drawRect(Box.x, Box.y, Box.width, Box.height);
  59.        g.drawString("Box Area:" + Box.getArea(), 50, 35);
  60.        g.drawString("Box Perimeter:" + Box.getPerimeter(), 50, 55);
  61.        g.drawString("tri Area:" + tri.getArea(), 50, 75);
  62.        g.drawString("tri Perimeter:" + tri.getPerimeter(), 50, 95);
  63.        g.drawOval(Oval.x, Oval.y, Oval.width, Oval.height);
  64.         g.drawString("oval Area:" + Oval.getArea(), 50, 115);
  65.     }
  66. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
张熙韬 + 2 很给力!

查看全部评分

回复 使用道具 举报
胡峰 中级黑马 2013-3-27 19:55:33
8#
首先一个夫类可以被多个子类继承
如A类(为夫类)
B为子类,B可以继承A,
C为子类,C可以继承B.
继承只能单继承



如果A为抽象类的话.
就是B继承A
C也可以继承A了.
注意类被final修饰了就无法继承了.


评分

参与人数 1黑马币 +15 收起 理由
张熙韬 + 15 神马都是浮云

查看全部评分

回复 使用道具 举报
胡峰 发表于 2013-3-27 19:55
首先一个夫类可以被多个子类继承
如A类(为夫类)
B为子类,B可以继承A,

回答准确
回复 使用道具 举报
田磊阳 发表于 2013-3-27 19:57
回答准确

呵呵.自己是这么理解的.解答的也不是太完美.回答问题.既可以帮助别人.也让我加深了印象
回复 使用道具 举报
不是一个类只能被继承一次,是一个类只能继承别的类一次,
被继承的类是父类,继承的类是子类,
通俗来讲,就是孩子只能有一个父亲,但是父亲可以有多个孩子,如果一个孩子有多个父亲,那就。。。
也就是b可以继承A,c可以继承A,d也可以继承A,但是b不可以又继承A,又继承B,这样就太不厚道了。当然,是不对的,呵呵
这就是java的单继承,但是接口弥补了它的缺点,接口可以多实现,就是b可以实现A接口的同时又实现B接口。
这就是接口的多实现。

评分

参与人数 1黑马币 +30 收起 理由
张熙韬 + 30 很给力!

查看全部评分

回复 使用道具 举报
张雪萍 发表于 2013-3-27 20:11
不是一个类只能被继承一次,是一个类只能继承别的类一次,
被继承的类是父类,继承的类是子类,
通俗来讲, ...

哈哈,解释的到位
回复 使用道具 举报
田磊阳 发表于 2013-3-27 20:14
哈哈,解释的到位

呵呵,,谢啦
回复 使用道具 举报
田磊阳 发表于 2013-3-27 19:46
是的,如果a是抽象类,b.c可以同时继承它,就好比一个父亲有多个孩子,而一个孩子只能有一个父亲。

给你写 ...

如果A不是抽象类呢 可以被同时继承不
回复 使用道具 举报
本帖最后由 田磊阳 于 2013-3-27 21:28 编辑
黄诗宾 发表于 2013-3-27 20:39
如果A不是抽象类呢 可以被同时继承不

可以的,你要知道这个并不是因为抽象才会继承,继承和抽象没有因果关系,而是用了抽象之后,继承变得更加简单。

用代码解释一下你的问题:
  1. abstract class A{
  2.         int num=0;
  3.         public  A(int i){
  4.                 System.out.println("aaaaaaaaaaaaaaaaaaa");
  5.                 num=i;
  6.         }
  7. }
  8. class B extends A{
  9.         int num=0;
  10.         public B(){
  11.                 super(10);
  12.                 System.out.println("bbbbbbbbbbbbbbbbbbbb");
  13.                 System.out.println("num= "+num);
  14.                 System.out.println("super.num= "+super.num);
  15.         }
  16. }
  17. class C extends A{
  18.         int num=0;
  19.         public C(){
  20.                 super(20);
  21.                 System.out.println("ccccccccccccccccc");
  22.                 System.out.println("num= "+num);
  23.                 System.out.println("super.num= "+super.num);
  24.         }
  25. }
  26. public class Demo {
  27.         public static void main(String [] args) {
  28.                 new B();
  29.                 new C();
  30.         }
  31. }
复制代码

评分

参与人数 1黑马币 +18 收起 理由
张熙韬 + 18 赞一个!

查看全部评分

回复 使用道具 举报
田磊阳 发表于 2013-3-27 21:27
可以的,你要知道这个并不是因为抽象才会继承,继承和抽象没有因果关系,而是用了抽象之后,继承变得更加 ...

请问  new B();
                new C();  这2句是什么意思,为什么可以直接打印出结果
回复 使用道具 举报
黄诗宾 发表于 2013-3-27 23:14
请问  new B();
                new C();  这2句是什么意思,为什么可以直接打印出结果 ...

实例化······你看一下毕老师的视频就明白了
回复 使用道具 举报
黄诗宾 发表于 2013-3-27 23:14
请问  new B();
                new C();  这2句是什么意思,为什么可以直接打印出结果 ...

写成这样也可以:
B b = new B();
C c=new C();
回复 使用道具 举报
1、Java中所谓的单继承是指,一个类只能同时继承一个父类,这样做是为了避免安全问题。例如这行代码:
  1. class Father{
  2. public void method(){
  3. System.out.println("father");
  4.      }
  5. }
  6. class Mother{
  7. public int method(){
  8.          return x;
  9.     }
  10. }
复制代码
Son类只能继承一个父类,要么是Father类,要么是Mother类:如果两个都继承,在调用method方法时就无法明确返回值类型。同理Son类也不能出现public boolean method()这样的一个方法。
2、Java支持一个类被多个子类继承,就像楼上所说的那样,一个父亲有多个子女。这个最好理解,因为在Java中,任意一个对象都是Object的子类,新建一个clss,默认都是extends Object.
3、Java支持多层继承:A extends B, B extends C,这也是允许的,这个也很好理解。如Student extends Person,而Person类默认继承Object类。
4、Java中支持多实现,即一个类即实现了A接口又实现了B接口。但是在回答你问题的时候我自己也产生了一个疑问,刚才这个问题我在网上查了半天,也没能找出一个合理的解释及方法,我把我的想法写出来,你也可以帮我解答一下。
  1. public interface A{
  2.         public abstract void method();
  3. }
  4. public interface B{
  5.        public abstract int method();
  6. }
  7. class X implements A,B{ //我们都知道,一个类可以同时实现多个接口,但是X类的method方法要怎样来定义呢?
  8. }
复制代码
5 、Java中的类也可以同时继承一个类并实现一个接口。如class A extends B implements C

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
姜伟 发表于 2013-3-28 00:27
1、Java中所谓的单继承是指,一个类只能同时继承一个父类,这样做是为了避免安全问题。例如这行代码:Son类 ...

让版主来回答吧 偶昨天才学到继承 水平不够:L
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马