java中的继承 - 我无法理解的东西

时间:2013-11-17 20:57:46

标签: java

我对Java中的继承有疑问,我无法理解:

我有这两个班级:

public class C
{
    public void foo(D d)
    {
         System.out.println("cd");  
    }
}

public class D extends C
{
    public void foo(C c)
    {
         System.out.println("dc");  
    }

    public void foo(D d)
    {
         System.out.println("dd");  
    }
}

主要:

public static void main(String[] args)
{
    C cd = new D();
    D dd = (D)cd;   
}

每个cddd的类型是什么?为什么?

3 个答案:

答案 0 :(得分:6)

这里涉及两种不同的类型:

  1. 变量的类型;
  2. 变量引用的对象的类型。
  3. 变量的类型独立于当前碰巧引用的对象的类型 - 反之亦然,对象的类型不依赖于访问它的变量的类型。因此,当您将对象分配给另一个不同的变量时,其类型不会受到影响。

    所以,

    • 变量的类型 cdC;
    • 其引用的对象的类型为D

答案 1 :(得分:1)

所以我们可以像这样介绍继承的概念......

来自前一课程的某些内容并拖拽其中的特征和品质。 ,并为我们自己创建一个像前面的类一样的新类,具有前面类的特性和特性。然后,前面的类将是超类,而新类将是Sub类..

前: - 孩子们有他们的父母'特点和品质。

import javax.swing.*;
class Form extends JFrame{

}
class Demo{
        public static void main(String[] args){
            Form f1=new Form();
            f1.setSize(300,300);
            f1.setTitle("Form");
            f1.setDefaultCloseOperation(Form.EXIT_ON_CLOSE);
            f1.setVisible(true);
        }
}

答案 2 :(得分:1)

我将从以下几点开始回答:

  1. D类是C类的扩展,因此D类是C类的子类。
  2. 左侧变量称为参考变量,带有新运算符的右侧赋值称为Object。
  3. 第一行显示D(子类)对象已分配给父类的引用变量。 这意味着cd是拥有Child类对象的Parent类型的引用变量。这意味着在运行时,编译器将检查Child类是否为Parent类的类型,如果是,它将强制转换并显示Child方法的输出。
  4. 每当在cd上调用foo方法时,都会调用Child类中存在的foo方法。
  5. 第二行显示D(子类)引用变量dd持有D(子类)的对象。

这就是说。原来是C(父类)的引用的cd现在隐式转换为D(Child)类。 子类参考变量(dd)再次存储子类(D)的对象。