天天看點

Java-繼承(extends)

1.概念

繼承的基本思想是,基于已有的類創造新的類。繼承已存在的類就是複用這些類的方法,而且可以增加一些新的方法和字段,使新類能夠适應新的情況。

2.基本作用

完成代碼的複用(有了繼承才有了方法覆寫和多态)

3.文法

【修飾符清單】 class 類名 extends 父類名{

//類體;

}

例:
//Animal
public class Animal {
    String name;
    String gender;
    int age;
    public void eat(){
        System.out.println(name+"吃東西");
    }
    public void sleep(){
        System.out.println(name+"在睡覺");
    }
}
 
//Dog
public class Dog extends Animal{
    void bark(){
        System.out.println(name+"旺旺~");
    }
    public static void main(String[] args) {
        Dog dog = new Dog();
        System.out.println(dog.name);
        System.out.println(dog.gender);
        System.out.println(dog.age);
        dog.eat();
        dog.sleep();
        dog.bark();
    }
}
 
//Cat
public class Cat extends Animal{
    void mew(){
        System.out.println(name+"喵喵~");
    }
    public static void main(String[] args) {
       Cat cat = new Cat();
        System.out.println(cat.name);
        System.out.println(cat.gender);
        System.out.println(cat.age);
        cat.eat();
        cat.sleep();
        cat.mew();
    }
}      
4.繼承術語

B類繼承A類

  • A類:父類、基類、超類、superclass
  • B類:子類、派生類、subclass
5.Java中子類繼承父類的哪些資料?
  • 私有的不支援繼承
  • 構造方法不支援繼承
  • 其他資料都可以被繼承
6.單繼承
  • Java語言中繼承隻支援單繼承,一個類不能同時繼承很多類
  • 雖然隻支援單繼承,但是一個類可以間接繼承其他類
  • Java語言中假設一個類沒有顯示繼承任何類,該類預設繼承Javase庫中提供的Java.lang.Object
7.子類通路父類成員變量

7.1子類和父類中不存在同名的成員變量

public class Base {
    int a;
    int b;
}
 
 
 
public class Derived extends Base{
    int c;
    public void method(){
        a = 10;  //從父類繼承
        b = 20;  //從父類繼承
        c = 30;  //通路自己
    }
}      

7.2子類和父類存在相同的成員變量

public class Base {
    int a;
    int b;
    int c;
}
 
 
public class Derived extends Base {
    char b;   //與父類同名,不同類型
    int c;    //與父類同名,相同類型
    public void method(){
        a = 10;   //通路父類繼承
        b = 20;   //通路誰的?
        c = 30;   //通路誰的?
        //d = 40;  //編譯器報錯
    }
}      
  • 如果通路的成員變量子類中有,則優先通路子類本身的
  • 如果通路的成員變量子類中無,父類中有,則通路繼承下來的
  • 如果子類與父類中有同名的成員變量,則優先通路子類自己的,即子類将父類的同名變量隐藏 
  • 成員變量的通路遵循就近原則,自己有就優先通路自己的
8.子類通路父類成員方法

8.1成員方法名字不同

public class Base {
    public void method1(){
        System.out.println("我是父類方法");
    }
}
 
 
 
public class Derived extends Base {
   public void method2(){
       System.out.println("我是子類方法");
   }
   public void method(){
       method1();   //父類方法
       method2();   //子類方法
   }
}      

8.2成員方法名字相同

public class Base {
    public void method1(){
        System.out.println("我是父類方法");
    }
    public void method2(){
        System.out.println("我是父類方法");
    }
}
 
 
 
public class Derived extends Base {
    public void method1(int a){
        System.out.println("我是子類方法");
    }
    public void method2(){
       System.out.println("我是子類方法");
   }
    public void method(){
        method1();   //父類方法
        method1(10); //子類方法
        method2();   //子類方法
   }
}      
  • 通過子類通路成員方法,先看子類本身有沒有,如果有通路自己的,如果沒有,通路父類的
  • 通過子類通路與父類同名方法時,如果子類和父類方法的參數清單不同則構成重載,根據調用方法傳遞的參數選擇合适的方法通路
  • 如果子類和父類同名方法的原型一緻,則隻能通路到子類的