Java super关键字(android中常见)

本文详细介绍了Java中的super关键字使用方法,包括如何在子类中调用父类成员变量及方法,以及构造函数中如何正确使用super调用父类构造器。通过具体的代码示例展示了super在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

super在android中比较常见,没有java基础也并不理解,所以空出时间学习了一下。


在Java类中使用super来引用基类的成分,比较简单,示例如下:

class FatherClass{
	public int value;
	public void f(){
		value=100;
		System.out.println
		("FatherClass.value:"+value);
	}
}


class ChildClass extends FatherClass{
	public int value;
	public void f(){
		super.f();
		value=200;
		System.out.println
		("ChildClass.value:"+value);
		System.out.println(value);
		System.out.println(super.value);
	}
}


public class test1 {
	public static void main(String[] args){
		ChildClass cc=new ChildClass();
		cc.f();
	}
}

最终输出的结果是:

FatherClass.value:100
ChildClass.value:200
200
100



另外继承中的构造也是用到了super,具体规则如下:


1、子类的构造过程中必须调用其基类的构造方法。

2、子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。

3、如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法。

4、如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错。


示例如下:(此处最好可以自己试验一下)

class SuperClass{
	private int n;
	
	SuperClass(){
		System.out.println("调用SuperClass()");
	}
	SuperClass(int n){
			System.out.println("调用SuperClass("+n+")");
		}
}

class SubClass extends SuperClass{
	private int n;
	
	SubClass(int n){
		
		//当子类的构造方法中没有写super的时候,系统默认的调用父类的没有参数的构造方法
		//相当于此处写了如下:
		//super();
		
		System.out.println("调用SuberClass("+n+")");
		this.n=n;
	}
	
	SubClass(){
		super(300);
		//在子类构造过程当中必须调用父类构造方法,并且super必须写在第一句(先有爸爸再有儿子)
		
		System.out.println("调用SubClass()");
	}
}
public class test2 {
	public static void main(String[] args){
		SubClass sc1=new SubClass();
		
		SubClass sc2=new SubClass(400);
		
	}
}

最终结果为:

调用SuperClass(300)
调用SubClass()
调用SuperClass()
调用SuberClass(400)

### AndroidJava 版本与 `super` 关键字 #### `super` 关键字概述 在Java编程语言中,`super`关键字用于访问和调用父类(超类)的方法以及构造函数。当子类重写了来自其父类的一个方法时,可以使用`super.method()`来调用被覆盖的父类版本的方法[^1]。 #### 使用场景 - **调用父类构造器**:如果子类需要在其初始化过程中执行某些特定操作的同时也完成父类的部分初始化工作,则可以在子类构造器的第一行通过`super([参数])`的形式显式调用父类带参或无参构造器。 ```java class Parent { public Parent() { /* ... */ } protected void parentMethod(){ System.out.println("Parent method"); } } class Child extends Parent{ private String childProperty; public Child(String property){ super(); // 调用了父类的默认构造器 this.childProperty = property; } } ``` - **调用父类成员方法**:假设存在同名但功能不同的实例方法存在于父子两个层次上,那么可以通过前缀`super.`的方式指定要调用的是哪个级别的实现。 ```java class SubClass extends SuperClass { @Override public void showDetails() { super.showDetails(); System.out.println("Additional details from subclass."); } } ``` #### AndroidJava 支持情况 对于运行于Android平台的应用来说,所使用的Java特性会受到目标API级别(Target API Level)的影响。尽管最新的Android Studio支持较新的Java版本语法糖如lambda表达式、流(Streams API)等,但是具体到某个特性的可用性和行为表现仍然取决于应用的目标SDK版本设置。关于`super`关键字本身而言,在任何受支持的Java版本里都是一致的行为模式,并不存在明显的差异性问题[^2]。 #### 兼容性注意事项 由于不同版本之间可能存在细微差别,因此建议开发者始终遵循官方文档指导并保持良好的编码习惯。特别是涉及到多态机制下的继承关系处理时更应该谨慎对待。另外值得注意的一点是在编写跨多个安卓版本适用的应用程序时,应当确保针对较低版本设备也能正常工作的前提下利用新版本带来的便利之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值