java继承和引用_浅谈Java继承、传递
一、繼承
1. 繼承的概念:
子類繼承父類,表明子類是一種特殊的父類,并且具有父類所不具有的一些屬性或方法。
2. 繼承中的初始化順序:
從類的結(jié)構(gòu)上而言,其內(nèi)部可以有如下四種常見形態(tài):屬性(包括類屬性和實(shí)例屬性)、方法(包括類方法和實(shí)例方法)、構(gòu)造器和初始化塊(包括類的初始化塊和實(shí)例的初始化塊)。對于繼承中的初始化順序,又具體分為類的初始化和對象的初始化。
在new創(chuàng)建對象時(shí),首先對對象屬性和初始化塊分配內(nèi)存,并執(zhí)行默認(rèn)初始化。如果存在父類,則先為父類對象屬和初始化塊先分配內(nèi)存并執(zhí)行初始化。
然后執(zhí)行父類構(gòu)造器中的初始化程序,接著才開始對子類的對象屬性和初始化塊執(zhí)行初始化。
注:
1. 在對象初始化階段,屬性和方法均針對子類可以從父類繼承過來的屬性和方法而言,一般而言,都是針對父類中非private而言的。
因?yàn)閜rivate修飾的為父類所特有的,子類沒有繼承過來,當(dāng)new子類時(shí),無須為其分配空間并執(zhí)行初始化。當(dāng)然了,父類的構(gòu)造器子類也是不繼承過來的,但構(gòu)造器另當(dāng)別論。
2. 類的初始化只執(zhí)行一次,當(dāng)對同一個(gè)類new多個(gè)對象時(shí),類屬性和類初始化塊只初始化一次。
3.繼承中的this和super:
構(gòu)造器中的this表示當(dāng)前正在初始化的對象引用,方法中的this表示當(dāng)前正在調(diào)用此方法的對象引用。this具體用法表現(xiàn)在一下幾個(gè)方面:
1.當(dāng)具多個(gè)重載的構(gòu)造器時(shí),且一個(gè)構(gòu)造器需要調(diào)用另外一個(gè)構(gòu)造其,在其第一行使用this(param)形式調(diào)用,且只能在第一行;
2.當(dāng)對象中一個(gè)方法需要調(diào)用本對象中其他方法時(shí),使用this作為主調(diào),也可以不寫,實(shí)際上默認(rèn)就是this作為主調(diào);
3.當(dāng)對象屬性和方法中的局部變量名稱相同時(shí),在該方法中需要顯式的使用this作為主調(diào),以表示對象的屬性,若不存在此問題,可以不顯式的寫this。
super表示調(diào)用父類中相應(yīng)的屬性和方法。在方法中,若需要調(diào)用父類的方法時(shí),也一定要寫在第一行。
public class People {
public String name;
private String live="活著";
People(String name){
this.name=name;
System.out.println("人對象"+name+"創(chuàng)建了");
}
public void print(){
System.out.println("name:"+this.name+"\t"+"live:"+this.live);
}
}
public class Student extends People{
public String name;
Student(String n){
super(n);
this.name=n;
System.out.println("學(xué)生對象"+name+"已創(chuàng)建");
}
public void print(){
System.out.println("name:"+this.name);
}
}
public class Demo {
public static void main(String [] args) {
Student s=new Student("aaa");
People p=new Student("bbb");
People p2=new Student("ccc");
People p3=p;
s.print();
p.print();
p2.print();
p3.print();
}
}
二、傳遞
傳遞分值傳遞和引用傳遞。
首先要說明的是java中是沒有指針的,java中只存在值傳遞。 然而我們經(jīng)常看到對于對象(數(shù)組,類,接口)的傳遞似乎有點(diǎn)像引用傳遞,可以改變對象中某個(gè)屬性的值。但是不要被這個(gè)假象所蒙蔽,實(shí)際上這個(gè)傳入函數(shù)的值是對象引用的拷貝,即傳遞的是引用的地址值,所以還是按值傳遞。
值傳遞
指的是在方法調(diào)用時(shí),傳遞的參數(shù)是按值的拷貝傳遞。
值傳遞重要特點(diǎn):傳遞的是值的拷貝,也就是說傳遞后就互不相關(guān)了
引用傳遞
指的是在方法調(diào)用時(shí),傳遞的參數(shù)是按引用進(jìn)行傳遞,其實(shí)傳遞的引用的地址,也就是變量所對應(yīng)的內(nèi)存空間的地址。
引用傳遞重要特點(diǎn):傳遞的是值的引用,也就是說傳遞前和傳遞后都指向同一個(gè)引用(也就是同一個(gè)內(nèi)存空間)。
student類加入
public void change(String b){
b=name;
}
主函數(shù):public class Demo {
public static void main(String [] args) {
Student s=new Student("aaa");
s.print();
s.change("ccc");
s.print();
}
}
很顯然輸出的 是aaa,aaa。傳遞的是值的一份拷貝,這份拷貝與原來的值沒有關(guān)系。
總結(jié)
以上是生活随笔為你收集整理的java继承和引用_浅谈Java继承、传递的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java读取 png_如何让java的I
- 下一篇: java调用asp.net webapi