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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Zhang_qian 中级黑马   /  2012-5-24 00:50  /  2254 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A
{
        A()
        {
                System.out.println("A");
        }

}

class B extends A
{
        B()
        {
                System.out.println("B");
        }
       
}
class ExtendsDemno
{
        public static void main(String[] args)
        {
                  B b=new B();
              A a=new A();
       
        }
}打印结果是A B A ,对super关键字还有点迷惑,请高手指点一下如果是有参构造的话,创建子类对象的有参构造会怎么样呢?帮忙讲解一下谢谢!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
super关键字类似于this关键字,如果你对this关键字有所了解的话,相信这个super不难,应为this代表当前对象的引用,而super代表父类对象的引用。。
你上面这个例子中B继承了A,,那么他们的属性和普通方法,构造方法都可以被继承.即使没有super 也会先调用父类的构造函数  super关键字用来显示的调用子类的方法。。如果要在子类的构造方法中调用父类的构造方法,则需要在子类构造方法的第一句用super关键字调用,比如super(),调用父类无参的构造方法,super(参数列表),调用父类有参数的构造方法。必须写在子类构造函数的第一条,super还可以调用父类的普通方法super.method(),或supermethod(参数列表);

参考代码:
class Employee
{
        private String name;
        private int age;
        private double salary=2000.0;
        public void displayInfo(){
                System.out.println("name:"+name+" ,age="+age);
        }
        public Employee(String name,int age,double salary){
                this.name=name;
                this.age=age;
                this.salary=salary;
        }
}
class Manager extends Employee
{
        private double bonus;
        private String position;
        public Manager(String name,int age,double salary,String position){
                super(name,age,salary);//调用父类构造函数
                this.position=position;
                super.displayInfo();
        }
        public void setBonus(double bonus){
                this.bonus=bonus;
        }
}
public class Demo
{
        public static void main(String []args){
                Manager m=new Manager("Tanwei",20,5000,"Java");
       
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
简单地说吧,子类继承父类的时候,在子类中有个默认的东西,它是super(),super()等同于父类中的构造方法B(){}。这个死记着的。所以~~~

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
This和Super关键字在本质上是相同的。  分享前辈的总结,请您参考:

this关键字
1)在类的内部代表对象本身,你应该看到过this.xxx(),this.xxx这种用法吧,
this就代表这个类的对象,比如
public class A {
   private String name;
   public void setName(String name) {
       //this就代表A的一个对象
       //当你实例一个A时,A a1 = new A();this就是那个a1,只是this在内部用,而a1在外部用
       //A a2 = new A()同理,这时在a2的内部,this就代表a2
       this.name = name;
   }
}

2)this的第二种用法,是用在构造函数里的
当在构造器里要调用自己的其他构造器时,就用this
this必须放在第一行
public class A {
   private String name;
   public A() {
       this("no name");
   }

   public A(String name) {
       this.name = name;
       //other codes
   }
}


super关键字
1)显式的调用父类的方法
当从一个类继承时,子类和父类都有一个同名方法,也就是子类覆盖了父类的方法,可是又想调用父类的方法,那么就要用super,像继承swing的类时就有个好例子
public class MyPanel extends JPanel {
   @Override
   public void paint(Graphics g) {
       super.paint(g);//如果不用super,那么就会调用自己的paint方法
   }
}

2)用在构造器,和this的用法一样,super也可以用在构造器,this是调用自己的其他构造器,那么super当然就是调用父类的构造器了
回复 使用道具 举报
对于super关键字,当在调用父类的方法时,有有参和无参两种形式调用,调用父类无参的构造方法super(),调用父类有参数的构造方法采用super(参数列表)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马