Java中super的用法

发布于 1970年 01月 01日 08:00

super用于子类调用父类方法(private保护的方法除外)#

子类默认会调用父类的无参构造器(在子类无参构造器的第一行中应为super())#

1、注意如果父类定义了有参构造器那么子类便无法调用默认的无参构造器,解决方法应当给父类写出显式的无参构造器,或者子类调用父类构造器时添加参数super(参数);

super的注意点:#

1、super调用父类的构造方法,必须写在构造方法的第一行。
2、super必须只能能出现在子类的方法或者构造方法中
3、super和this不能同时调用构造方法。

super与this的区别#

1、代表的对象不同
this:本身调用者这个对象
super:代表父类对象的应用
this:没有继承也能用
super:只能在继承中使用
构造方法的区别
this():本类的构造
super():父类的构造
image

代码解析#

//执行方法
public class application {
    public static void main(String[] args) {
        /*Demo09 student= new Demo09();
        student.setName("dalao");
        student.setAge(1000);//不合法数据
        System.out.println(student.getName()+"年龄"+student.getAge());//println属于方法的重载
        student.setAge(68);//合法数据
        System.out.println(student.getAge());//println属于方法的重载

         */
        Demo11 student = new Demo11();
        student.test01("小明");
        student.test02();
    }
}
//父类方法
public class Demo10 /*extends Object*/{
    public Demo10(){
        System.out.println("父类无参构造器已执行");
    }
    protected String name="小明同学";
    public void print(){//假如此处改为private私有其实也可继承只不过应当使用类如get,set方法来访问子类不能直接调用
        System.out.println("我是父类");
    }
}
//子类方法
    public Demo11(){
        super();//子类会默认调用父类的无参构造器
        System.out.println("子类无参构造器已执行");
        //super();而且调用父类无参构造器必须放在代码第一行
    }
    private String name ="xiaomingtongxue";
    public void test01(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
    public void print(){
        System.out.println("我是子类");
    }
    public void test02(){
        print();
        this.print();
        super.print();
    }

结果#

父类无参构造器已执行
子类无参构造器已执行
小明
xiaomingtongxue
小明同学
我是子类
我是子类
我是父类