疯狂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修饰 实例变量的 ...
随机推荐
- Struts2防止表单重复提交
1.说明 系统拦截器的应用. 表单重复提交:当使用请求转化进行跳转的时候,存在着表单重复提交的问题. 2.在表单中加入s:token 如果页面加入了struts2的标签,页面的请求必须进入struts ...
- IntelliJ IDEA 15.0.4常用快捷键整理
一.背景 最近刚转了IDEA,感觉真是爽的一逼,太智能了,回不去Eclipse了,还有些淡淡的忧伤呢~在使用中很多的快捷键帮了开发的大忙,让我可以达到事半功倍的效果,下面就罗列出来,与大家共同分享. ...
- HBase参数配置及说明(转)
版本:0.94-cdh4.2.1 hbase-site.xml配置 hbase.tmp.dir 本地文件系统tmp目录,一般配置成local模式的设置一下,但是最好还是需要设置一下,因为很多文件都会默 ...
- 三、jQuery--Ajax基础--Ajax全接触--JSON
JSON基本概念 JSON:JavaScript对象表示法(JavaScript Object Notation) JSON是存储和交换文本信息的语法,类似XML.它采用键值对的方式来组织,易于人们阅 ...
- orcad candence 快捷键小结
- bootstratp图标的使用
bootstratp作为一个优秀的前端框架,最近使用了其中的Glyphicon Halflings的字体图标.起初一直显示不出来,后面通过搜索相关资料直到成功显示,在此做一些总结,方便后面复习. 1. ...
- Juery Ajax语法
$.ajax({ url: "/ForgetCard/ForgetLogin",//方法路径URL data: { strUser: $("#textUser" ...
- .NET Framework 4 与 .NET Framework 4 Client Profile
今天碰到的一个问题和Client Profile相关的.问题是这样的:一个WPF工程,需要引用另外几个.NET的assembly, 在WPF工程中添加了对这几个assembly的引用,并在程序中可以添 ...
- 网站Session 处理方式
分布式session有以下几种方案: 1. 基于nfs(net filesystem)的session共享 将共享服务器目录mount各服务器的本地session目录,session读写受共享服务器i ...
- 轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)
hey,guys!我们一起总结一下JS预解析吧! 首先,我们得搞清楚JS预解析和JS逐行执行的关系.其实它们两并不冲突,一个例子轻松理解它们的关系: 你去酒店吃饭,吃饭前你得看下菜谱,点下菜(JS预解 ...