2.3 super关键字

①super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象.

②super代表的是当前子类对象中的父类型特征。

③什么时候使用super?

类和父类中都有某个数据,例如,子类和父类中都有name这个属性。如果要再子类中访问父类中的name属性,需要使用  super.

④super可以用在什么地方?

>super可以用在成员方法中,不能用在静态方法中。

> super可以用在构造方法中。

⑤super关键字用在构造方法中:

语法:

super(实参);

作用:通过子类的构造方法去调用父类的构造方法.

语法规则:一个构造方法第一行如果没有this(...);也没有显示的去调用super(...);系统会默认调用super();

注意

>super(...);的调用只能放在构造方法的第一行; super(....)和this(....)不能共存。super(...);调用了父类中的构造方法,但是并不一定会创建父类对象。java语言中只要是创建java对象,那么Object中的无参数构造方法一定会执行。

>尤其当子父类出现同名成员时,可以用super进行区分;super的追溯不仅限于直接父类; super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识。

⑦单例模式缺点:单例模式的类型无法被继承

super用在成员方法中:

//员工

public class Employee{

String name = "张三";

//成员方法

public void work(){

System.out.println("员工在工作!");

}

}

//经理

public class Manager extends Employee{

String name = "李四";

//子类将父类中的work方法重写了.

public void work(){

System.out.println("经理在工作!");

}

//成员方法

public void m1(){

//this.work();

//work();

super.work();

System.out.println(this.name);

System.out.println(name);

System.out.println(super.name);

}

/*

//this和super相同,都不能用在静态上下文中。

public static void m1(){

System.out.println(super.name);

}

*/

}

super用在构造方法中:

//账户

public class Account extends Object{

//Field

private String actno;

private double balance;

//Constructor

public Account(){

//super();

System.out.println("Account的无参数构造方法执行!");

}

public Account(String actno,double balance){

//super();

this.actno = actno;

this.balance = balance;

}

//setter and getter

public void setActno(String actno){

this.actno = actno;

}

public String getActno(){

return actno;

}

public void setBalance(double balance){

this.balance = balance;

}

public double getBalance(){

return balance;

}

}

public class DebitAccount extends Account{

//Field

            //独特属性

private double debit;

//Constructor

public DebitAccount(){

//super();

}

public DebitAccount(String actno,double balance,double debit){

            //通过子类的构造方法去调用父类的构造方法,作用是:给当前子类对象中的父类型特征赋值。

super(actno,balance);

this.debit = debit;

}

//setter and getter

public void setDebit(double debit){

this.debit = debit;

}

public double getDebit(){

return debit;

}

}

public class Test02{

public static void main(String[] args){

DebitAccount da = new DebitAccount();

}

}

单例模式的类无法被继承

//单例模式的类型没有子类。无法被继承.

//父类

public class Servlet{

//构造方法私有

private Servlet(){}

}

//子类

class HttpServlet extends Servlet{

}

Java——super关键字的更多相关文章

  1. Java super关键字活用

    在实际开发中我们要自定义组件,就需要继承自某个组件类,如果我们自定义的这个组件类也需要像被继承的这个组件类一样,拥有丰富的构造方法. 关键字super的作用就更加显得尤为重要了,你可以在堆砌自己自定义 ...

  2. [Java学习] Java super关键字

    super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...

  3. 四. Java继承和多态2. Java super关键字

    super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...

  4. java——super关键字、final关键字、throws关键字、访问控制

    super关键字: 当父类被重写之后,子类对象无法访问父类被重写的方法,super就是为了解决这个问题: 1.使用super关键字访问父类的成员变量和成员方法: super.成员变量 super.成员 ...

  5. 《Java基础知识》Java super关键字

    super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类. super也有三种用法: 1.普通的直接引用 与this类似,super相当于是指向当前对象的父类,这样 ...

  6. java super关键字

    子类用super操作被隐藏的成员变量和方法 Example5_7.java class Sum { int n; float f() { float sum=0; for(int i=1;i<= ...

  7. java super关键字和调用父类构造方法

    表示父类对象的默认引用 如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法. 使用super调用父类方法 使用super调用父类的构造方法 调用构造方法 本类中调用另 ...

  8. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...

  9. Java中关键字super与this的区别

    一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象.怎么去引 ...

随机推荐

  1. 前端学习(十四)js回顾和定时器(笔记)

    回顾知识点:    作用域:        1.全局变量:在任何位置都可以使用的变量        2.局部变量:只能在函数内部使用的变量        3.闭包:子函数可以使用父函数的局部变量 -- ...

  2. property和attribute的区别---value

    从网上看到很多写关于input的value属性,写的setAttribute可以影响DOM的property的value,在实践中我发现不同现象, 在页面初始化后,用setAttribute对valu ...

  3. 8、Python MySQL - mysql-connector 驱动

    一. 在线安装 mysql-connector :  pip install mysql-connector-python 二.操作流程 1.连接数据库信息: conn =  mysql.connec ...

  4. 记录常用的linux命令

    原文链接:https://www.cnblogs.com/suger43894/p/11024594.html 系统信息相关 date 显示系统日期 cat /proc/mounts 显示已加载的文件 ...

  5. SpringBoot - @ControllerAdvice 处理异常

    在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...

  6. cocos2D-X Download

    { http://cocos2d-x.org/download https://github.com/cocos2d/cocos2d-x https://github.com/fusijie/Coco ...

  7. SQL 循环语句几种写法

    1.正常循环语句 declare @orderNum varchar(255)create table #ttableName(id int identity(1,1),Orders varchar( ...

  8. Yii2增、删、改、查

    $order_model = OrderHeader::find()->where(['user_id'=>$user_id, 'order_type'=>'1'])->and ...

  9. NYOJ 737 (石子合并)

    该题是一道DP题,核心思想如下: 某个区间一定是这个区间内的某两个子区间合成的(这两个子区间互补,即这两个区间加起来等于大区间), 所以我们枚举所有的情况,取个最大值即可.因为最初是从2堆石子开始无法 ...

  10. golang 读取 ini配置信息

      package main //BY: 29295842@qq.com//这个有一定问题   如果配置信息里有中文就不行//[Server] ;MYSQL配置//Server=localhost   ...