一、概述
面向對象編程中,繼承是一個比較重要的概念,繼承描述的是事物之間的所屬關系,是從已有的類中構建出新的類,已有的類稱為父類,新的類稱為子類,子類具有父類的數據屬性和方法,并能擴展新的屬性和方法(不能繼承私有)。
1、繼承的使用
格式:使用 extends 關鍵字 ==> class 子類 extends 父類 ()
創(chuàng)建 Person 類和 Student 子類:public class Student extends Person {...}
2、繼承的優(yōu)點
提高了代碼的復用性,提高了軟件的開發(fā)效率
讓類與類之間產生了聯(lián)系,提供了多態(tài)的前提
3、繼承的特點
在Java中,只支持單繼承,不支持多繼承,一個子類只能有一個直接父類;
父類私有成員,子類不能繼承,因為根本看不到;
一個父類可以有多個子類;
支持多層繼承,一個類的父類可以再去繼承另外的父類;
子類和父類是相對的概念,一個類是某個類父類的同時,也可以是另一個類的子類。
4、繼承中成員變量關系
不同變量名子類直接調用;
相同變量名調用時,如果子類有,就不調用父類的變量,如果子類沒有,父類有,則調用父類的;
在子類中,要調用父類的成員,使用關鍵字 super,調用父類方法也是一樣,使用super關鍵字
二、代碼實例
public abstract class Person {
? ? String name;
? ? int age;
? ? int i = 1;
? ? public void setName(String name)
? ? {
? ? ? ? this.name = name;
? ? }
? ? public void setAge(int age)
? ? {
? ? ? ? this.age = age;
? ? }
? ? public String getName()
? ? {
? ? ? ? return name;
? ? }
? ? public int getAge()
? ? {
? ? ? ? return age;
? ? }
}
再創(chuàng)建Studen.java子類
public class Student extends Person {
? ? int i = 2;
? ? int number;
? ? public void setNumber(int number)
? ? {
? ? ? ? this.number = number;
? ? }
? ? //在子類中能直接使用父類的非私有成員變量
? ? public void message()
? ? {
? ? ? ? System.out.println("My name is " + this.name + ",I am " + this.age + " years old," + " my number is " + this.number);
? ? }
? ? public void print()
? ? {
? ? ? ? System.out.println(name);
? ? ? ? System.out.println(super.i);? ? ? //在子類中,要調用父類的成員,使用關鍵字super
? ? }
}
在Main.java中賦值并調用
public class Main {
? ? public static void main(String[] args)
? ? {
? ? ? ? Student stu = new Student();
? ? ? ? stu.setAge(18);
? ? ? ? stu.setName("java");
? ? ? ? stu.setNumber(32);
? ? ? ? stu.message();
? ? ? ? stu.print();
? ? ? ? System.out.println(stu.i);? ? ? //子類有則調用子類的,子類沒有則調用父類的
? ? }
}
實例分析:
1.在父類Person中定義了非私有變量name、age和測試變量i,子類Student中新創(chuàng)建了number變量并在子類中能夠使用父類中的變量。
2.在父類和子類中都有 i 變量,調用時,如果子類有,就不調用父類的變量,如果子類沒有,父類有,則調用父類的。
3.在子類中,要調用父類的成員,使用關鍵字 super,調用父類方法也是一樣,使用super關鍵字。