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

© 黄诗宾 高级黑马   /  2013-3-27 19:06  /  3757 人查看  /  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();
回复 使用道具 举报
姜伟 发表于 2013-3-28 00:27
1、Java中所谓的单继承是指,一个类只能同时继承一个父类,这样做是为了避免安全问题。例如这行代码:Son类 ...

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