黑马程序员技术交流社区

标题: 练习中遇到super问题 [打印本页]

作者: 钟伟杰    时间: 2013-4-23 01:19
标题: 练习中遇到super问题
本帖最后由 钟伟杰 于 2013-4-23 12:55 编辑

class B
{        
}
public  class A extends B
{
        public static void main(String[] args)
        {
          new A().test();
        }

        public void test()
        {
                System.out.println(super.getClass().getName());
        }
}

运行结果是:A
A继承B,test方法中的super不是调用父类B的吗?为什么调用A类的呢?
作者: 续圆凯    时间: 2013-4-23 01:51
这段程序中,虽然A继承了B但是   Test方法是A类的方法,所以 结果会打印A的类名。
作者: Friendy89    时间: 2013-4-23 07:11
何为继承,当子类继承了父类的方法后,它便拥有了父类的属性,子类创建对象时会先调用父类的构造方法。 如果父类没有无参构造方法。 子类需重写父类构造方法
所以楼主弄清楚继承的概念即可
作者: 陈湘林    时间: 2013-4-23 08:52
super关键字
super:超级
如果,子类想要在构造方法,可以用super关键字
父类
  1. package t1;
  2. public class Person {
  3.         String name;
  4.         public Person(){
  5.                 System.out.println("Person构造了");
  6.         }
  7.         public void showme(){
  8.                 System.out.println("你好");
  9.         }
  10. }       
  11. 子类
  12. package t1;
  13. public class Student extends Person{
  14.         //子类也有独立的构造方法
  15.         public Student(){
  16.                 super();//调用父类的构造方法
  17.                 super.showme();//super就相当于Person这个类
  18.         }
  19. }
  20. 测试
  21. package t1;
  22. public class Test {
  23.         public static void main(String[] args) {
  24.                 Student s=new Student();
  25.         }
  26. }
  27. 结果

  28. Person构造了
  29. 你好
复制代码

作者: 肖川    时间: 2013-4-23 08:53
super的用法:
super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时)

你的用法两类都不是,怎么会打印出父类的类名呢,根本没有用到父类的成员属性或者函数。
作者: 蒋名勇    时间: 2013-4-23 12:31
在继承关系中,如果A继承B,那么B中有而A中没有的public修饰的和protected修饰以及默认修饰的属性和方法都会被继承过来,但是如果B中有,A中也有的那么就是重写,就是多态,如果用的是子类对象,那么就会调用子类的方法,如果是A中特有的方法和属性,那么只有当引用和指向都是子类的时候才能调用的到




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2