?
自從換了個視頻教學,感覺比原來那個好多了,就是學校網速太渣,好多視頻看一會卡半天,只能先看看已經下載的了.
不過也好,雖然不能從開始開始重新開,但是已經看過一次,在看一次也是好的,就當鞏固學習了.
?
繼承的關鍵字:extends
格式如下: class 子類名 extends父類名{
...
}
例如 學生是繼承人類這一父類的.
class student extends person{
...
}
如果一個類的聲明沒有使用關鍵字extends,則這個類默認是繼承Object類的.Object是所有類的父類.Object是java.lang包中的類.
當一個子類繼承了一個父類時,子類可以調用父類中的所有方法和成員變量.子類也可以單獨自己聲明方法或者變量.
下面的代碼創建了4個class.分別是Dog,Cat,Animal和包含主函數的Main類.其中Dog和Cat是繼承父類Animal的.
?
Cat繼承Animal類:
package com.cnblogs;
public class Cat extends Animal{ ?
//不帶參數的默認構造器
?public Cat(){ ??
//super();必須出現在構造方法的首行. ??//this();也如此. ?
? super();
?//?super("XX",10);? 該代碼表示調用父類帶參的構造器 ?
?System.out.println("Cat構造器"); ?}
?/* public String name;
? public int age; ?
?public void walk(){
System.out.println("Cat....walk"); ?
}
?public void sleep(){
System.out.println("Cat....sleep");
?} ?*/
?//注解提示
@Override ?
public void how(){
System.out.println(name +" "+ "Cat....miaomiao");??
//super 強制調用父類的show()方法法.
//如果沒有super,show();是this.show();的默認寫法. ??
//步驟是:先調用子類的show()方法.子類如果沒有show方法才調用父類的show()方法??
super.show();
?}
?public void show(){
System.out.println(name +" "+ "Cat----->show"); ?
}
}
聲明Dog類:
package com.cnblogs;
public class Dog extends Animal { ?
/*public String name;
?? public int age; ?
?? public void walk(){
?? System.out.println("Dog....walk"); ?
} ?
? ?public void sleep(){ ?
? System.out.println("Dog....sleep");
?} ?*/
? ?public void how(){ ?
?System.out.println(name +" "+ "Dog....wangwang"); ?}
}
?
創建一個Animal的父類:
package com.cnblogs;
//Animal不寫繼承就是默認繼承Object類. //抽象類不能new.傳入的是子類的實例對象.
public abstract class Animal extends Object{ ?
public String name;
public int age; ?
//默認的不帶參的構造器
?public Animal(){ ?
this("baobao",2);
//this();調用的是下面帶參的Animal的方法 ??
System.out.println("Animal--->()");
?} ?
//帶參的構造器.給屬性賦初始值
public Animal(String name,int age){ ??
this.name = name; ?
this.age = age;??
System.out.println("Animal--->(name,age)");
?}??
public void walk(){
System.out.println(name + "---->walk");???
sleep();
how();
//this.show 調用的是子類的show()方法,如果子類沒有show()方法.在調用父類的show()方法.??
this.show();
?} ?
?public void sleep(){
System.out.println(name + "---->sleep");
?} ?
//抽象方法.
?public abstract void how(); ?
?public void eat(){
System.out.println(name + "---->Eat");
?} ?
?public void play(){?
System.out.println(name + "---->Play");
?}
?public void show(){
System.out.println(name +" "+ "Animal---->show");
}
}
?Main類(包含主函數):
?
package com.cnblogs;
?
public class Main {
?
?public static void main2(String[] args) { ?
?//生成一個cat對象
Cat cat = new Cat();??
cat.name ="xiaohua";??
cat.age = 3;??
cat.walk();???
cat.how();???
//生成一個dog對象 ?
Dog dog = new Dog();??
dog.name = "xiaomei";???
dog.age= 3; ?
dog.walk(); ?
dog.eat(); ?
dog.how(); ?
?//調用的是調出來的對象 ?
Animal animal = new Cat();
animal.name = "HH";
??//調用的是子類Cat()的how()方法.???
animal.how();???
Animal animal2 = new Dog();
animal2.name = "XX"; ?
?//調用的是子類Dog()的how方法??
animal2.how();??????
animal.walk();?????
?//GetMsg方法要求傳入的是子類cat,所以傳入的必須是cat,而不能是animal. ?
GetMsg(cat); ?
GetMsg(dog); ?
GetMsg(animal2);
?} ?
/* public static void GetMsg(Cat cat){
??cat.how(); ?
}*/ ?
//將子類的對象傳入給父類的引用 ? //比上面的傳入單獨的cat靈活,一般使用下面這種方法 ?
public static void GetMsg(Animal animal){
animal.how();???
}??
/**?*1. new一個對象以后先調用子類Cat的第一個方法,運行super();調用父類Animal的第一個方法???
*2. 父類中的構造方法執行this();方法,this方法又調用Animal帶參數的方法并輸出;在返回不帶參的構造器執行this();下面的輸出語句 ??
*3. 在返回子類Cat中執行super();下面的語句,輸出"Cat構造器" ??
*4. 接著animal.how()調用new出來的對象 cat的how()方法 ??
*5. 執行子類Cat()方法中的how()方法,并輸出. ??
*6. 接著在運行how()方法中的super().show;然后調用父類Animal的show()方法.并輸出相應的結果. ?? * */ ?
public static void main(String [] args){??
Animal animal = new Cat();???
animal.how(); ? }
}
?
super();調用父類的構造器,方法和屬性.
this();調用該方法的當前對象.
?
今天博客園居然不能插入代碼塊,不知道出什么問題只能自己手寫,寫了半天.看的頭都暈了.