疯狂java学习笔记之面向对象(七) - super关键字
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();
}
}
疯狂java学习笔记之面向对象(七) - super关键字的更多相关文章
- 疯狂java学习笔记之面向对象(四) - this关键字
Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...
- 疯狂java学习笔记之面向对象(八) - static和final
一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- 疯狂java学习笔记之面向对象(五) - 封装、继承、多态
一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- 疯狂java学习笔记之面向对象(九) - 抽象和接口
一.抽象(abstract): 1.抽象类: 使用abstract修饰的类就是抽象类; 相比于普通类抽象类增加了支持抽象方法的功能,但也丢失了创建实例的功能(抽象类中不能创建实例),其他普通类有的抽象 ...
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
- 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递
方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...
- 疯狂java学习笔记之面向对象(二) - 成员变量与局部变量
Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...
随机推荐
- ASP.net绑定文本框Enter事件到按钮 ASP.NET执行后台执行JS方法
txtAccountBarcode.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if (( ...
- web前端开发:css3实现loading
web前端开发:css3实现loading 有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 <!DOCTYPE ...
- IPv6地址介绍
IPv6地址介绍 2008 年 04 月 10 日 1. 认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示:而IPv6 ...
- 阿里云服务器出现Warning: Cannot modify header information - headers already sent by (output started at 问题的解决方法
阿里云服务器出现Warning: Cannot modify header information - headers already sent by (output started at 问题的解决 ...
- NYOJ题目96 n-1位数
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAscAAAJgCAIAAADpjVkvAAAgAElEQVR4nO3du04jS/gv7H0T5FwIsa ...
- RxJava学习入门
RxJava是什么 一个词:异步. RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-bas ...
- UVA 10192 Vacation
裸最长公共子序列 #include<time.h> #include <cstdio> #include <iostream> #include<algori ...
- Linux环境下段错误的产生原因及调试方法小结
转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...
- Solr入门之(8)中文分词器配置
Solr中虽然提供了一个中文分词器,但是效果很差,可以使用IKAnalyzer或Mmseg4j 或其他中文分词器. 一.IKAnalyzer分词器配置: 1.下载IKAnalyzer(IKAnalyz ...
- Oracle数据库 控制文件
一.概念控制文件的主要任务是管理数据库的状态以及描述数据库的物理结构 二.所含有的信息1.数据库名2.数据库标识符(DBID)3.数据库创建时间戳4.数据库字符集5.数据文件信息6.临时文件信息7.在 ...