java子类型和子类以及true子类型

时间:2014-02-12 12:11:48

标签: java inheritance

我已经阅读了很多关于java子类型和真正的子类型的解释 但是每次我变得更加困惑时,我需要对上面提到的所有内容进行完美的解释,我是否接受以下陈述?

  1. 从另一个类继承的每个类都是子类
  2. 某个类是另一个类的java子类,如果它具有相同的方法
  3. 真正的子类型是我们可以替换两个类之间的引用
  4. 提前致谢

2 个答案:

答案 0 :(得分:1)

从另一个类继承的每个类都是子类

我会纠正这个

  

“扩展另一个类的每个类都是子类”

和FYI java中的每个类都默认扩展java.lang.Object类,除了Object类本身。

某些类是另一个类的java子类,如果它具有相同的方法

事实并非如此。考虑以下示例

class A {
   public void someMethod(){
      // method code
   }
}

class B {
   public void someMethod(){
      // method code
   }
}

两者都是独立的类,B不是A的子类,或者A不是B的子类。

真正的子类型是我们可以替换两个类之间的引用

编辑:

class A {
   public void someMethod(){
      // method code
   }
}

class B extends A{
   public void someMethod(){
      // method code
   }
}

您可以创建类B的对象,它是A的子类

A objB = new B();

这个概念是Runtime Polymorphism。你可以查看一篇文章Inheritance in Java

答案 1 :(得分:0)

只有第一个陈述是真的。

#2:如果一个类是另一个类的子类,它将具有相同的方法(此语句的反向不一定正确)。考虑这个例子:

public class Animal
{
    public void sayHello () 
    { 
         System.out.println ("Hello!");
    };
}

public class Dog extends Animal
{
    public void sayHello () 
    { 
         System.out.println ("Woof! I'm a dog.");
    };
}

public class WebApplication
{
    public void sayHello () 
    { 
         System.out.println ("Welcome!");
    };
} 

WebApplicationDog都有类似的sayHello方法,但只有DogAnimal的子类。

#3:我不知道“替换引用”是什么意思。如果DogAnimal的子类,则可以将Dog对象分配给Animal引用,但反之亦然。