黑马程序员技术交流社区

标题: Super方法理解 [打印本页]

作者: 杨武刚    时间: 2011-7-16 19:44
标题: Super方法理解
super有时候可以直接使用调用父类的方法,"super.",有时候却可以重载函数一样,比如“super()”,在JDK文档里面没有这个资料,有谁有这方面的使用经验或资料,可否详细描述下先
作者: 匿名    时间: 2011-7-16 20:20
super在这里都是指父类
调用父类的方法时是    super.要调用的父类方法名;
super()一般用来调用父类的构造方法
比如A是父类
class A {
        public A() {
                System.out.println(“父类构造函数”);
        }
}
B是子类,子类不能继承父类的构造方法,也不继承私有成员,其他的都可以继承,一般子类要写自己的构造方法的,不然容易出错
class B extends A {
        public B() {
                super();
        }
}
作者: 匿名    时间: 2011-7-16 20:31
super 是java中的关键字 是一个超类
 超类 :用java术语来讲,被继承的类称为超类,继承的类称为子类。   面向对象编程的最重要的特色之一就是能够使用以前创建的类的方法和域。通过简单的类来创建功能强大的类,可以大幅地节省编程时间,更重要的是,这样做可以减少代码出错的机会。要在以前的类上构造新类,就必须在类声明中扩展这个类。   通过扩展一个超类,可以得到这个类的一个新副本,并且可以在其上添加其他功能。如果对这个新类并不做任何添加工作,那么,它的工作情况与超类完全相同,新类中会含有超类所声明和继承的、具有访问权限的所有方法和域。   对于超类,应该确切地理解this和super关键字的使用,下图演示了这两个关键字的使用。  [code] import java.awt.*;   
public class TestThisSuper extends Frame   {  
 int b;   
public TestThisSuper(String a)   {  
 this (a,0);   
}   
public TestThisSuper(String a, int b)   {
  super(a);   this.b= b;  
 }   
}[/code]
作者: 那日苏    时间: 2011-7-16 23:24
你是想要super的用法吧,
1.子类的构造函数如果要引用父类构造方法时,会用到super(必须放在构造函数首位)。
2.有时会遇到子类中的成员变量或方法与父类的成员变量或方法同名时可以使用super来调用父类成员变量或方法。(这时因为子类中的成员变量或方法优先级高,所以子类中的同名成员变量或方法就隐藏了父类的成员变量或方法。)

如有遗漏请补充。[code=java]public class Person{
        public  void prt(String s){
                System.out.println(s);
        }
        Person(){
                prt("A Person");
                }
        Person(String name){
                prt("A person name is"+name);
        }
}
public class Man extends Person{
        int age;
        Man(){
                super();//调用父类构造函数
       
        prt("A Man");
        }
        Man(String name){
                super(name);//调用父类具有相同参数的构造函数
                prt("his name is"+name);
        }
        Man(String name,int age){
                this(name);//调用当期具有相同参数的构造函数
                prt("his age is"+age);
        }
        public static void main(String args[]){
                Man man=new Man();
                man=new Man("liudehua");
                man=new Man("liudehua",50);
        }
}[/code]
[ 本帖最后由 那日苏 于 2011-07-16  23:41 编辑 ]
作者: 匿名    时间: 2011-7-18 09:56
标题: 感谢各位同学的帮助
窦雪同学的回答很精简,也按我想了解的Super方法的两个方面描述的,lihaihan和那日苏同学都对比this方法来描述,这样两种方法的使用就会更深了,还是对比学习的方法好。谢谢各位同学。




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