Java0基础完美撒花(最后有彩蛋噢)
关于Java中的super关键词:
一.super是一个关键词,全部小写。
二.super和this对比着学习。
-------this---------------------
1)this:this能出现在实例方法和构造方法中。
2)this的语法:"this.“和"this()”
3)this不能使用在静态方法中。
4)this.大部分情况下是可以省略的。
5)this.什么时候不能省略呢?在区分局部变量和实例变量的时候不能省略。
public void setName(String name){
this.name=name;
}
6)this()只能出现在构造方法的第一行,通过当前的构造方法去调用"本类"中其他的构造方法,目的是:代码复用。
-------super--------------------
1)super:super能出现在实例方法和构造方法中。
2)super的语法:“super.“和"super()”
3)super不能使用在静态方法中。
4)super.大部分情况下是可以省略的。
5)super.什么时候不能省略呢?父类中有,子类中又有,如果想在子类中访问"父类的特征”,super,不能省略
6)super()只能出现在构造方法的第一行,通过当前的构造方法去调用"父类"中其他的构造方法,目的是:创建子类对象的时候,先初始化父类型特征。
三.super()
1)表示通过子类的构造方法调用父类的构造方法
2)模拟现实世界中的这种场景:要想有儿子,需要现有父亲
四.重要的结论:
当一个构造方法的第一行:既没有this(),也没有super()的话,默认会有一个super();表示通过当前子类的构造方法调用父亲的无参数构造方法。所以必须保证父类的无参数构造方法是存在的。
五.注意:
this()和super()不能共存,它们都是只能出现在构造方法第一行。
六.无论是怎样折腾,父类的构造方法是一定会执行的。(百分百的)
样例no1:
思考1:super(实参)到底是干啥的?
super(实参)的作用是:初始化当前对象的父类型特征。并不是创建新对象,实际上对象只创建了一个。
思考2:super关键字代表什么呀?
super关键字代表的就是"当前对象"的那部分父类型特征。
我继承了我父亲的一部分特征:
例如:眼睛、皮肤等
super代表的就是"眼睛、皮肤等"
"眼睛、皮肤等"虽然是继承了父亲的,但这部分是在我自己身上。
//测试程序
public class Main {
public static void main(String[] args) {
CrediAccount ca1=new CrediAccount();
System.out.println(ca1.getActno()+","+ ca1.getBalance()+","+ca1.getCredit());
//null,0.0,0.0
CrediAccount ca2=new CrediAccount("1111",1000.0,0.999);
System.out.println(ca2.getActno()+","+ ca2.getBalance()+","+ca2.getCredit());
//1111,1000.0,0.999
}
}
//账户
class Account{
//属性
private String actno;
private double balance;
//构造方法
public Account(){
}
public Account(String actno, double balance) {
this.actno = actno;
this.balance = balance;
}
//setter和getter
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
//xyk
class CrediAccount extends Account{
//属性:信誉度(诚信度)
//子类特有的一个特征,父类没有
private double credit;
//构造方法
//分析一下程序是否存在编译错误?
public CrediAccount(String actno,double balance,double credit){
//私有的属性,只能在本类中访问
/*
this.actno=actno;
this.balance=balance;
*/
//以上两行代码在恰当的位置,正好可以使用:super(actno,balance);
//通过子类的构造方法调用父类的构造方法。
super(actno,balance);
this.credit=credit;
}
//提供无参数的构造方法
public CrediAccount(){
}
//setter和getter
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
样例2:
public class Main {
public static void main(String[] args) {
Vip v=new Vip("张三");
v.shopping();
}
}
class Customer{
String name;
public Customer(){}
public Customer(String name){
super();
this.name=name;
}
}
class Vip extends Customer{
//假设子类也有一个同名属性
//java中允许子类中出现和父类一样的同名变量/同名属性
String name;//实例变量
public Vip(){}
public Vip(String name){
//以下这种情况输出全为,张三在购物
/*super(name);
this.name=name;
*/
//以下这种情况输出分别为,张三、null、张三 在购物
/*super();
this.name=name;
*/
//以下这种情况输出为,null、张三、null 在购物
//父类和子类中有同名同类型变量时,访问父类就不能省super
super(name);
}
public void shopping(){
System.out.println(this.name+"正在购物");//null正在购物
System.out.println(super.name+"正在购物");//张三正在购物
System.out.println(name+"正在购物");//null正在购物
}
}
小结:
1.this:
1)this.属性名
2)this.方法名(实参)
3)this(实参)
2.super:
1)super.属性名
2)super.方法名(实参)
3)super(实参)
4)super就代表父
彩蛋1号!!!
system.exit(0);是退出JVM的语句!
彩蛋2号!!!
你猜猜…hhh…没了!!!
最后,希望在学Java的同学不负青春不负己!!!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)