3繼承
3.1繼承的實現
1. 基本概念:擴展父類的功能
2. 關鍵字:extends
3. 格式:
class 子類 extends 父類{ }
package com.dzh.extendsdemo;
/**
* 繼承:子類Student,父類People,測試類ExtendsDemo01
*
* @author Daisy
*
*/
class People {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Student extends People {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public void tell() {
System.out.println("姓名:" + getName() + ",年齡:" + getAge() + ",成績:"
+ getScore());
}
}
public class ExtendsDemo01 {
public static void main(String[] args) {
Student s = new Student();
s.setName("Sam");
s.setAge(20);
s.setScore(98);
s.tell();
}
}
3.2繼承的限制
1. Java繼承只能是單繼承,可以多層繼承。
class Animal{
//父類
}
class Pig extends Animal{
//子類1
}
class Dog extends Animal{
//子類2
}
class LDog extends Dog{
//多層繼承,可以調用Dog類的屬性方法,也可以調用Animal類的屬性方法
}
2. 子類不能直接訪問父類的私有變量,需要通過get/set方法訪問。
3.3子類對象的實例化過程
1. 在子類對象實例化之前,先調用父類中的構造方法,之後調用子類構造方法。
class Father {
public Father() {
System.out.print("1父類的構造方法");
}
}
class Son extends Father {
public Son() {
System.out.print("2子類的構造方法");
}
}
public class ExtendsDemo03 {
public static void main(String[] args) {
Son s = new Son();
}
}
3.4 Java方法重寫和super關鍵字
3.4.1 方法的重寫
1. 在繼承中,重寫就是子類定義了和父類同名的方法。
2. 定義:方法名相同,返回值類型相同,參數相同。
class A {
public void tell() {
System.out.println("Hello,我是A。");
}
}
class B extends A {
public void tell() {
System.out.println("Hello,我是B,我重寫了方法tell。");
}
}
public class ExtendsDemo04 {
public static void main(String[] args) {
B b = new B();
b.tell();
}
}
子類重寫了父類的方法,如果不強行調用,父類的方法不會被調用。
在重寫方法時,使用super關鍵字調用父類的方法。
class B extends A {
public void tell() {
super.tell();//強行調用父類的tell方法
System.out.println("Hello,我是B,我重寫了方法tell。");
}
}
3. 重寫限制:被子類重寫的方法不能擁有比父類的更加嚴格的訪問權限。即重寫方法時,訪問修飾符可以不一致,但權限不能比父類大。private < default < public ,通常重寫方法時修飾符與其一致不做修改。
4. super關鍵字:
① 強行調用父類的方法進行執行;
② 不一定在重寫中使用,也可以表示那些方法是從父類中繼承而來的。
3.4.2重寫與重載的區別
名稱 |
重寫(Overriding) |
重載(Overloading) |
定義 |
方法名稱、返回值類型,參數全部相同 |
方法名稱相同,參數類型或個數不同 |
權限 |
被重寫的方法不能比父類擁有更嚴格的權限 |
沒有要求 |
範圍 |
發生在繼承中 |
同一個類中 |