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(); //子類方法
}
}
- 通過子類通路成員方法,先看子類本身有沒有,如果有通路自己的,如果沒有,通路父類的
- 通過子類通路與父類同名方法時,如果子類和父類方法的參數清單不同則構成重載,根據調用方法傳遞的參數選擇合适的方法通路
- 如果子類和父類同名方法的原型一緻,則隻能通路到子類的