自從換了個視頻教學,感覺比原來那個好多了,就是學校網速太渣,好多視頻看一會卡半天,只能先看看已經下載的了.
不過也好,雖然不能從開始開始重新開,但是已經看過一次,在看一次也是好的,就當鞏固學習了.
繼承的關鍵字: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();調用該方法的當前對象.
今天博客園居然不能插入代碼塊,不知道出什么問題只能自己手寫,寫了半天.看的頭都暈了.