首页 > 编程语言 >JavaSE--super关键字

JavaSE--super关键字

时间:2023-08-09 10:44:42浏览次数:34  
标签:balance 构造方法 -- actno JavaSE 父类 super public

一、super关键字

1、super

是一个关键字,全部小写

2、this与super对比

  this:

  •     this可以出现在实例方法中和构造方法中
  •     语法:this.或者this()
  •     this不能使用在静态方法中
  •     this.大部分可以省略,在区分局部变量和实例变量的时候不能省略,
  •     this()调用本类中其他构造方法,只能出现在第一行

  super:

  •     super可以出现在实例方法中和构造方法中
  •     语法:super.或者super()
  •     super不能使用在静态方法中
  •     super.大部分可以省略,什么时候可以省略
  •     super()调用父类中其他构造方法,只能出现在第一行,目的是:创建子类对象时,先初始化父类特征

3、重要结论:

  当一个构造方法第一行:既没有this()又没有super()的话,默认会有一个super();

  表示通过当前子类的构造方法调用父类的无参构造方法

  所以必须保证父类的无参构造时存在的

4、注意:

  this()和super()不能共存,他们都只能出现在构造方法的第一行

5、无论如何怎么样,父类的构造方法时一定会执行的,子类构造方法执行之前必然调用父类的构造方法

public class SuperTest01{
    public static void main(String[] args){
        // 创建子类对象
        new B();// 输出:A类中的无参构造  B类中的无参构造
    }
}

class A{
    // 建议将一个类的无参构造手动写出来
    public A(){
        System.out.println("A类中的无参构造");
    }
    public A(int i){
        System.out.println("A类中的有参构造(int)");
    }
}

class B extends A{
    public B(){
        // super();// 规定:如果构造方法中什么都不写,第一行自动会有super();
        super(100);
        System.out.println("B类中的无参构造");
    }
}

 二、什么时候使用super(实际参数列表);

  注意:在构造方法执行过程中一连串调用了父类的构造方法,父类的构造方法又继续向下调用它的父类的构造方法,但是实际上对象只创建了一个

  super(实际参数列表);的作用:初始化当前对象的父类型特征,不是来创建对象的

  super关键字就代表了“当前对象”的那部分父类型特征

public class SuperTest03{
	public static void main(String[] args){

		CreditAccount ca1 = new CreditAccount();
		System.out.println(ca1.getActno() + "," + ca1.getBalance() + "," + ca1.getCredit());

		CreditAccount ca2 = new CreditAccount("1111", 10000.0, 0.999);
		System.out.println(ca2.getActno() + "," + ca2.getBalance() + "," + ca2.getCredit());

	}
}

// 账户
class Account extends Object{
	// 属性
	private String actno;
	private double balance;

	// 构造方法
	public Account(){
		//super();
		//this.actno = null;
		//this.balance = 0.0;
	}
	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;
	}
}

// 信用账户
class CreditAccount extends Account{

	// 属性:信誉度(诚信值)
	// 子类特有的一个特征,父类没有。
	private double credit;

	// 构造方法
	// 分析以下程序是否存在编译错误????
	public CreditAccount(String actno, double balance, double credit){

		// 私有的属性,只能在本类中访问。
		/*
		this.actno = actno;
		this.balance = balance;
		*/

		// 以上两行代码在恰当的位置,正好可以使用:super(actno, balance);
		// 通过子类的构造方法调用父类的构造方法。
		super(actno, balance);
		this.credit = credit;
	}

	// 提供有参数的构造方法
	public CreditAccount(){
		//super();
		//this.credit = 0.0;
	}

	// setter and getter方法
	public void setCredit(double credit){
		this.credit = credit;
	}
	public double getCredit(){
		return credit;
	}
	
}

 

三、什么时候super.不能省略

  如果父类和子类中有同名属性,并且想要在子类中访问父类中的同名属性,suer.不能省略

  如果父类和子类中有相同方法,此时想要在子类中访问父中的数据,必须使用suer.区分

四、结论

  super 不是引用,super也不保存内存地址,也不指向任何对象

  super只代表当前对象内部那一块父类型的特征

  super不仅可以访问属性,也可以访问方法

  

标签:balance,构造方法,--,actno,JavaSE,父类,super,public
From: https://www.cnblogs.com/hyy-0/p/17610355.html

相关文章

  • allure 系统有权限不能运行报错的解决方法
    当出现"FileC:\Users\Administrator\AppData\Roaming\npm\allure.ps1cannotbeloadedbecauserunningscriptsisdisabledonthissystem"的错误消息时,表示你的系统禁止执行脚本文件。为了解决这个问题,你可以尝试执行以下步骤:以管理员身份运行命令提示符或PowerShell:右......
  • Windows系统 如何配置Maven的本地仓库 【详解Maven settings.xml配置(指定本地仓库、
    1.确认安装Maven首先,我们需要确认已在计算机上安装了Maven。你可以从Maven官方网站:https://archive.apache.org/dist/maven/maven-3/下载适合你代码ide版本的Maven安装包,比如我idea2019就下载maven3.5-3.6之间的版本。1、先新建名为MAVEN_HOME的变量,值为你的的maven解压路径......
  • 使用 python 分割大的文本文件
    在开发过程中会遇到有些大文件,因为比较大,无法打开的情况,这个时候需要进行文件分割,这里使用python进行文件分割,代码如下:importosimportmathimportsysblock_size=int(sys.argv[2])*1024*1024defsplit_file(filepath:str,block_size:int):filesize=os.path.get......
  • springboot不使用端口的方式启动
    SpringBoot项目不占用端口启动现在很多互联网公司或者项目,都使用SpringBoot+SpringCloud,以微服务的形式来提供后台服务。而且既然是微服务,所涉及到的项目就会很多,服务器端口资源就会相当紧张。而且,其实有些项目,如定时任务等,是不需要对外提供服务,也就不需要占用服务器端口的。......
  • js 修约
    /***修约精度*@paramnum数值*@paramlen精度(1、0.5、10、0.1、0.01)等*@returns四舍五入*/exportfunctionROUND5(num,len){return$ROUND(num,len,'5')}/***修约精度*@paramnum数值*@paramlen精度(1、0.5、10、0.1、0.01)等*@re......
  • JavaSE--方法覆盖和多态
    一、方法覆盖Override1、什么时候使用Override  例如:以下代码:鸟儿在执行move方法时,最好输出“鸟儿在飞翔”,但是当前程序在执行move方法时,输出“动物在移动”,显然Bird子类继承来的方法无法满足需求  子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类有权......
  • MySQL 管理表(增删改查)
    MySQL管理表:增加行:添加一行:insertintouservalues(42,"bbb","x",1003,1003,"teacher","/home/jingyaya3","/bin/bash");#添加所有列insertintotarena.user(name,uid,shell)values("aaa",1002,"/sbin/no......
  • 关于将预留单中增强字段带入物料凭证和会计凭证中
    1.业务需求预留中自定义文本字段“大项修”。根据预留创建物料凭证时,将该字段带入到物料凭证中,类似标准字段“项目文本”。并在物料凭证自动产生会计凭证后,将该字段带入到会计凭证行项目中。其中需要解决以上三张凭证对该字段的界面显示,以及预留对该字段的维护。解决接口中用BAP......
  • 内卷和躺平之外,职场还有其他选择
    上周写了篇文章《不要仅限于只做测试工作》,我想要表达的是不要被岗位名称和定义的职责范围困住自己,要尝试去做一些更大范围的更能锻炼自己能力的事情。后台有一位同学留言如此说道:质量保障之外潜台词里面关注效率,测试左移、右移都是在围绕提升效率和质量做文章。单系统问题......
  • rocky linux:安装ffmpeg(ffmpeg 5.1.3/rocky linux 9.2)
    一,ffmpeg官网:网址:http://ffmpeg.org/如图:说明:最新版本出到了6.0,我们从dnf通道安装,版本可能略低二,安装rpmfusion库[root@img~]#dnfinstall--nogpgcheckhttps://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm[root@img~]#dnfinstall......