super有以下两大作用:

  1、起限定作用:强制去访问父类的成员(Field、方法)

  2、起调用作用:指定/显示调用父类的某个构造器

super调用规则:

  1、子类构造器总会调用父类构造器一次,默认情况下子类构造器会自动调用父类无参数的构造器;

  2、若希望明确指定子类构造器调用父类哪个构造器,可以用super(参数,参数,....),到底调用哪个父类构造器取决于super后面传入的形参列表;

  3、this()调用与super()调用都必须出现在构造器的第一行,所以他们两个调用时不能同时出现的.

约定俗成:

  1、若没有super()调用,也没有this()调用,默认子类构造器会自动调用父类无参数构造器;

  2、若有super()调用,根据super()调用传入的形参列表去决定调用哪个父类构造器;

  3、若有this()调用,子类构造器会找到this()调用所对应的子类中被重载的构造器。

例1:在方法中使用super.起限定作用

 class Fruit{
private String color;
private double weight; public Fruit(){}
public Fruit(String color , double weight){
this.color = color;
this.weight = weight;
} public void info(){
System.out.println("这是一个水果哦!");
System.out.println("水果颜色是:" + color + ",重量为:" + weight);
}
} public class Apple extends Fruit{
public void info(){
System.out.println("这是个苹果!");
} public void test(){
System.out.println("~~Apple test 方法");
//this.info(); - 通过this. 调用info默认总是调用本类中定义的info()方法
super.info(); //- 通过super. 限定后强制调用父类中的info()方法
} public static void main(String[] args){
Apple a = new Apple();
a.test();
}
}

例2:在Field中使用super. 同样起限定作用

 class Demo{
int count = 2;
} public class TestDemo extends Demo{
int count = 10;
public void test(){
//默认count(即count前不加this./super.)时,其前面默认省略了this
//若一定要使用父类的count Field必须在其前面加上super.
System.out.println("test方法访问当前类的count为:" + this.count);
System.out.println("test方法访问父类的count为:" + super.count);
} public static void main(String[] args){
TestDemo t = new TestDemo();
t.test();
}
}

例3:通过super调用父类构造器

 class Person{
protected String name;
protected int age;
protected String sex; //程序员定义了有参构造器,因此系统不会再为该类生成无参构造器
public Person(String name , int age , String sex){
this.name = name;
this.age = age;
this.sex = sex;
} //假如不定义方法,直接在main方法中调用name/age/sex 参数编译时会报错"staic方法不能引用非static变量"
public void info(){
System.out.println("老师的名字叫:" + name + ",年龄为:" + age + ",性别为:" + sex);
}
} public class Teacher extends Person{
private String sex; //若不指定构造器,默认会去调用父类的无参构造器,但父类又没有无参构造器则报错
public Teacher(String name , int age , String sex){
super(name,age,sex);
} public static void main(String[] args){
Teacher tt = new Teacher("haha",30,"male");
tt.info();
}
}

最新文章

  1. 使用 VS2005 通过按钮自动上传文件到Linux
  2. Sql server 2008 R2 实现远程异地备份
  3. opencv基于混合高斯模型的图像分割
  4. Python-变量
  5. C 语言sscanf
  6. Xamarin.Forms介绍
  7. struts json登录
  8. Python3 学习第九弹: 模块学习二之文件管理模块
  9. WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞
  10. android 国内sdk下载地址及代理, android 环境搭建
  11. JS中如何使用Cookie
  12. selenium通过WebDriverWait实现ajax测试
  13. centos配置samba
  14. LindDotNetCore~docker里图像上生成中文乱码问题
  15. git删除远程文件夹
  16. 关于查询中查询无果,也不报错,inpout标签中的value属性为‘ ’的判断问题
  17. echarts之折线图配置(附带图例很多做成分页效果)
  18. spark streaming插入hbase
  19. Oracle数据库基础教程
  20. Linux下内存泄漏工具【转】

热门文章

  1. 单击双击手势(UITapGestureRecognizer)
  2. September 6th 2016 Week 37th Tuesday
  3. CLR via C#(03)- 对象创建和类型转换
  4. 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类
  5. WindowManagerPolicy的后缀 解释
  6. 【C#】 用Route进行URL重写
  7. djcelery的细节篇
  8. Win7下的内置FTP组件的设置详解
  9. Lucene.net 全文检索 盘古分词
  10. 在Salesforce中进行Report和Dashboard的配置