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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟伟杰 中级黑马   /  2013-4-23 01:19  /  1871 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟伟杰 于 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类的呢?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
这段程序中,虽然A继承了B但是   Test方法是A类的方法,所以 结果会打印A的类名。
回复 使用道具 举报
何为继承,当子类继承了父类的方法后,它便拥有了父类的属性,子类创建对象时会先调用父类的构造方法。 如果父类没有无参构造方法。 子类需重写父类构造方法
所以楼主弄清楚继承的概念即可

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
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. 你好
复制代码
回复 使用道具 举报
super的用法:
super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时)

你的用法两类都不是,怎么会打印出父类的类名呢,根本没有用到父类的成员属性或者函数。
回复 使用道具 举报
在继承关系中,如果A继承B,那么B中有而A中没有的public修饰的和protected修饰以及默认修饰的属性和方法都会被继承过来,但是如果B中有,A中也有的那么就是重写,就是多态,如果用的是子类对象,那么就会调用子类的方法,如果是A中特有的方法和属性,那么只有当引用和指向都是子类的时候才能调用的到
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马