1、Java中的繼承
- 繼承是類與類的一種關系
Java中的繼承是單繼承的,即每個子類只有一個父類 - 繼承的好處
子類擁有父類的所有屬性和方法,但其修飾符不能是private
代碼的復用 - 語法規則
class 子類 extends 父類
如:class dog extends animal{
......
}
2、Java中的方法重寫
- 什么是方法的重寫
如果子類對繼承父類的方法部門滿意,是可以重寫父類繼承的方法的,當調用方法是會優先調用子類的方法 - 語法規則
1、返回值類型
2、方法名
3、參數類型及個數
以上都要與父類繼承的方法相同,才叫方法的重寫
3、Java中的繼承初始化順序
繼承的初始化順序
- 初始化父類再初始化子類
- 先執行初始化對象中屬性,再執行構造方法中的初始化
package exp;
public class animal {
public int age=10;
public String name;
public void eat(){
System.out.println("動物具有吃東西的能力");
}
public animal(){
System.out.println("animal 類執行了");
age=20;
}
}
package exp;
public class dog extends animal {
public dog(){
System.out.println("dog 類執行了");
}
}
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();
}
}
Paste_Image.png
Paste_Image.png
4、Java中的final的使用
final關鍵字:可以修飾類、方法、屬性、變量
- final修飾類,則該類不允許被繼承
- final修飾方法,則該方法不允許覆蓋(重寫)
- final修飾屬性,則該類的屬性不會進行隱式的初始化(類的初始化屬性必須有值)或在構造方法中賦值(但只能選其一)
- final修飾變量,則該變量的值只能賦一次值,即常變量
5、Java中的super的使用
super關鍵字:在對象內部使用,可以 代表父類對象
- 訪問父類的屬性
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 類執行了");
}
}
package exp;
public class dog extends animal {
public int age=20;
public void eat(){
System.out.println("dog吃骨頭");
}
public dog(){
System.out.println("dog 類執行了");
}
public void method(){
super.eat(); //必須在子類的構造方法的第一行
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的應用
子類的構造過程當中必須調用其父類的構造方法,則系統默認調用父類無參的構造方法;如果顯示的調用構造方法,必須在子類的構造方法的第一行;如果子類構造方法中既沒有顯示調用父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯
public dog(){
// super();隱式顯示
System.out.println("dog 類執行了");
}
6、Java中的object類
object類是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那么這個類默認繼承object類
object類中的方法,適合所有的子類
-####方法
1、toString()方法
在object類里面定義toString()方法的時候返回的對象的哈希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對象在內存中的地址
重寫toString()方法在eclipse的source菜單下,自動生成
public String toString() {
return "animal [age=" + age + ", name=" + name + "]";
}
2、equals()方法
比較的是對象的引用是否指向同一塊內存地址。一般情況下比較兩個對象時比較他的值是否一致,所以要進行重寫
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("兩個對象是相同的");
}else{
System.out.println("兩個對象是不相同的");
}
}
}
public class game{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("請輸入你要找的學生的姓名:");
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("沒有這個學員存在");
}
}
判斷兩個對象是否相等,在eclipse里的source里可以自動生成
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;//得到一個類對象,即類的代碼信息
dog other = (dog) obj;
if (age != other.age)
return false;
return true;
}