Java 繼承
繼承的概念
繼承是java面向對象編程技術的一塊基石,因爲它允許創建分等級層次的類。
繼承就是子類繼承父類的特徵和行爲,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行爲。
類的繼承格式
在 Java 中通過 extends 關鍵字可以申明一個類是從另外一個類繼承而來的,一般形式如下:
類的繼承格式
class 父類 {
}
class 子類 extends 父類 {
}
實例:
我們定義一個 Person 類作爲父類,包括 姓名、性別、年齡 等基本信息封裝完成。
定義一個 Student 類作爲,子類,在父類的基礎上多了 學號、分數 等信息。
則代碼實現爲:
父類:
public class Person {
private String name;
private String sex;
private int age;
public Person() {
}
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
子類則爲:
public class Student extends Person{
private int num;
private double score;
public Student() {
}
//注意這裏的構造方法
public Student(String name, String sex, int age,int num, double score) {
super(name, sex, age);
this.num = num;
this.score = score;
}
//-------------------------------------
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String toString() {
return "Student [num=" + num + ", score=" + score + "name=" + this.getName() + ", sex=" + this.getSex() + ", age=" + this.getAge() + "]";
}
}
這樣,子類就繼承了父類中 name 、sex、 age 等基礎屬性,與getage()等方法。
Main 方法
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
Student s2 = new Student("王二狗子", "boy", 10, 1, 90);
//s2 爲 Student 類,但是可以調用 getAge()方法,因爲繼承了父類Person
System.out.println(s2.getAge());
}
}
繼承的特性:
* 1.繼承的單向的 * 2.正常的繼承一個類只能有一個父類! * 3.子類繼承父類的方法和屬性 * 4.子類可以新增方法和修改父類中繼承來方法
P.S. super 與 this 關鍵字
super關鍵字:我們可以通過super關鍵字來實現對父類成員的訪問,用來引用當前對象的父類。
this關鍵字:指向自己的引用。
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void eatTest() {
this.eat(); // this 調用自己的方法
super.eat(); // super 調用父類方法
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
/*
animal : eat
dog : eat
animal : eat
*/