Java中的多重继承?

时间:2014-11-25 14:04:24

标签: java inheritance multiple-inheritance

这个程序似乎在使用多重继承。但是Java不支持多重继承,那么这个程序是如何工作的呢?

当两个类StudentProfessor继承基类Person时,编译此代码的原因是什么?

class Person
{
    private String name;
    private int age;
    private int val;

    private int value(int sal)
    {
        return sal/100;
    }

    public Person(String name, int age, int sal)
    {
        this.name = name;
        this.age = age;
        val = value(sal);
    }
    public void valOverride(int val)
    {
        this.val = val;
    }   

    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    public int getVal()
    {
        return val;
    }
}

class Student extends Person
{
    Student(String name, int age, int sal)
    {
        super(name,age,sal);
    }
}

class Prof extends Person
{
    Prof(String name, int age, int sal)
    {
        super(name,age,sal);
    }
}

public class AbsDemo
{
    public static void main(String[] args)
    {
        Student s = new Student("prasi", 21, 18000);
        Prof pr = new Prof("david",38,25000);
        System.out.println(pr.getVal());
        pr.valOverride(22);
        Person p = new Student("prasanna", 22, 12000);
        System.out.println(s.getName());
        System.out.println(p.getName());
        System.out.println(s.getVal());
        System.out.println(pr.getVal());
    }
}

9 个答案:

答案 0 :(得分:5)

Java“不支持多重继承”,因为类只能extend一个其他类。

一个父类的多个子类没有任何问题。

答案 1 :(得分:3)

enter image description here

如果使用

Person extends Student,Prof{}

你有一个多重继承,这在JAVA中是不可能的。

答案 2 :(得分:2)

Java 支持“多重继承”在以下情况中:

  • 接口(您可以在一个类中拥有多个接口)
  • 顺序(ClassA扩展ClassB,扩展ClassC)
  • 多个类可以扩展相同的类(ClassA和ClassB都扩展ClassC)

然而,Java多重继承的概念(在维基百科中松散地定义):

  

多重继承是一些面向对象的计算机编程语言的一个特性,其中一个对象或类可以从多个父对象或父类继承特性和特性。

http://en.wikipedia.org/wiki/Multiple_inheritance

因此,如果您尝试将它们添加到同一个类中,那么Java表示 NOT 支持多重继承(A类扩展ClassB,ClassC)。

就是这样,问题中的代码它不是使用多重继承的概念。它只是扩展同一类的多个类。

答案 3 :(得分:1)

这不是多重继承。当一个类扩展另外两个类而不是当两个不同的类扩展同一个类时,多重继承。您可以通过创建接口来解决多重继承问题。 Java类可以实现任意数量的接口,但它们只能扩展一个类。

不是多重继承(支持):

class Student extends Person

class Prof extends Person

多重继承(不支持):

class Student extends Person, Teenager

答案 4 :(得分:1)

这里没有多重继承......

多重继承是一个类从两个或更多个类扩展的地方

答案 5 :(得分:1)

多重继承将从多个类继承,例如

BaseA    BaseB
 ^         ^   
  \       /
   \     /
    \   /
  DerivedA

您的示例是单继承,从同一基类发生两次:

        BaseA
          ^  
        /  \
       /    \
      /      \
  DerivedA  DerivedB 

答案 6 :(得分:0)

以前说过,多重继承看起来像这样:

class SomePerson extends Student, Prof //invalid
{...}

Java不允许这种类型的多重继承(使用类),但它允许多个类继承自同一个类,如示例所示。

答案 7 :(得分:0)

enter image description here

这是您的代码的流程图。这里没有多重继承概念

答案 8 :(得分:0)

是Java不支持多重继承。你不能像这样扩展两个类

public class A extends B, C

你的代码是这样的

public class A
{
   public class B extends A
   {

   }

    public class C extends A
   {

   }
}

这是inner classes的概念,而不是multiple inheritance