1、Java中的繼承
- 繼承是類與類的一種關(guān)系
Java中的繼承是單繼承的诲泌,即每個(gè)子類只有一個(gè)父類 - 繼承的好處
子類擁有父類的所有屬性和方法盲赊,但其修飾符不能是private
代碼的復(fù)用 - 語法規(guī)則
class 子類 extends 父類
如:class dog extends animal{
......
}
2、Java中的方法重寫
- 什么是方法的重寫
如果子類對繼承父類的方法部門滿意敷扫,是可以重寫父類繼承的方法的哀蘑,當(dāng)調(diào)用方法是會優(yōu)先調(diào)用子類的方法 - 語法規(guī)則
1、返回值類型
2、方法名
3绘迁、參數(shù)類型及個(gè)數(shù)
以上都要與父類繼承的方法相同合溺,才叫方法的重寫
3、Java中的繼承初始化順序
繼承的初始化順序
- 初始化父類再初始化子類
- 先執(zhí)行初始化對象中屬性缀台,再執(zhí)行構(gòu)造方法中的初始化
package exp;
public class animal {
public int age=10;
public String name;
public void eat(){
System.out.println("動物具有吃東西的能力");
}
public animal(){
System.out.println("animal 類執(zhí)行了");
age=20;
}
}
package exp;
public class dog extends animal {
public dog(){
System.out.println("dog 類執(zhí)行了");
}
}
package exp;
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
animal a=new animal();
System.out.println("animal age:"+a.age);
dog d=new dog();
d.age=10;
d.name="趙歡";
d.eat();
}
}
4棠赛、Java中的final的使用
final關(guān)鍵字:可以修飾類、方法将硝、屬性恭朗、變量
- final修飾類,則該類不允許被繼承
- final修飾方法依疼,則該方法不允許覆蓋(重寫)
- final修飾屬性痰腮,則該類的屬性不會進(jìn)行隱式的初始化(類的初始化屬性必須有值)或在構(gòu)造方法中賦值(但只能選其一)
- final修飾變量,則該變量的值只能賦一次值律罢,即常變量
5膀值、Java中的super的使用
super關(guān)鍵字:在對象內(nèi)部使用,可以 代表父類對象
- 訪問父類的屬性
super.age - 訪問父類的方法
super.eat()
package exp;
public class animal {
public int age=10;
public String name;
public void eat(){
System.out.println("animal吃東西");
}
public animal(){
System.out.println("animal 類執(zhí)行了");
}
}
package exp;
public class dog extends animal {
public int age=20;
public void eat(){
System.out.println("dog吃骨頭");
}
public dog(){
System.out.println("dog 類執(zhí)行了");
}
public void method(){
super.eat(); //必須在子類的構(gòu)造方法的第一行
System.out.println(super.age);
}
}
package exp;
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
dog d=new dog();
d.method();
}
}
- super的應(yīng)用
子類的構(gòu)造過程當(dāng)中必須調(diào)用其父類的構(gòu)造方法误辑,則系統(tǒng)默認(rèn)調(diào)用父類無參的構(gòu)造方法沧踏;如果顯示的調(diào)用構(gòu)造方法,必須在子類的構(gòu)造方法的第一行;如果子類構(gòu)造方法中既沒有顯示調(diào)用父類的構(gòu)造方法巾钉,而父類又沒有無參的構(gòu)造方法翘狱,則編譯出錯(cuò)
public dog(){
// super();隱式顯示
System.out.println("dog 類執(zhí)行了");
}
6、Java中的object類
object類是所有類的父類砰苍,如果一個(gè)類沒有使用extends關(guān)鍵字明確標(biāo)識繼承另外一個(gè)類潦匈,那么這個(gè)類默認(rèn)繼承object類
object類中的方法,適合所有的子類
-####方法
1赚导、toString()方法
在object類里面定義toString()方法的時(shí)候返回的對象的哈希code碼(對象地址字符串)
可以通過重寫toString()方法表示出對象的屬性
package exp;
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
dog d=new dog();
System.out.println(d);
}
}
//exp.dog@15db9742此處輸出的是dog對象在內(nèi)存中的地址
重寫toString()方法在eclipse的source菜單下茬缩,自動生成
public String toString() {
return "animal [age=" + age + ", name=" + name + "]";
}
2、equals()方法
比較的是對象的引用是否指向同一塊內(nèi)存地址吼旧。一般情況下比較兩個(gè)對象時(shí)比較他的值是否一致凰锡,所以要進(jìn)行重寫
package exp;
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
dog d=new dog();
d.age=15;
dog d2=new dog();
d2.age=15;
if(d.equals(d2)){
System.out.println("兩個(gè)對象是相同的");
}else{
System.out.println("兩個(gè)對象是不相同的");
}
}
}
public class game{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("請輸入你要找的學(xué)生的姓名:");
String name=in.next();
String[] arr={"張三","李四","王二","麻子","壁虎"};
boolean flag=false;
for(int i=0;i<arr.length;i++){
if(name.equals(arr[i])){
flag=true;
break;
}
}
if(flag==true){
System.out.println("找到了");
}else{
System.out.println("沒有這個(gè)學(xué)員存在");
}
}
判斷兩個(gè)對象是否相等,在eclipse里的source里可以自動生成
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;//得到一個(gè)類對象圈暗,即類的代碼信息
dog other = (dog) obj;
if (age != other.age)
return false;
return true;
}