天天看點

JavaSE基礎知識【五】:繼承繼承

目錄

  • 繼承
    • 1.基本文法
    • 2.使用繼承時的注意事項
    • 3.使用繼承的目的
    • 4.繼承中的代碼塊
    • 5.組合

繼承

1.基本文法

使用 extends 指定父類。 is-a的關系。

class 子類 extends 父類 { 
}
           

父類也稱基類、超類。子類也成派生類。

2.使用繼承時的注意事項

(1)子類繼承了父類中除構造方法外的所有東西。

代碼示例:

class Cat extends Animal{
    private String sex;
    public Cat(String name, int age) {
        super(name, age);//父類中有name和age,cat已經繼承,此處不用再寫。
    }
}
           

(2)super關鍵字的用法:

①super();調用父類的構造方法。(必須放在第一行)

②super.func(); 調用父類的方法。

③super.data; 調用父類的資料成員。

代碼示例:

class Animal {
    protected String name;
    private int age;
    public int a;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void sleep(){
        System.out.println("睡覺");
    }
}
class Cat extends Animal{
    private String sex;
    public Cat(String name, int age) {
        super(name, age);
    }
     public void func(){
        super.sleep();
        int a=super.a;
    }
}
           

(3)如果要構造子類,必須要先構造父類。

代碼示例:

class Cat extends Animal{
    private String sex;
    public Cat(String name, int age) {
        super(name, age);  //用super關鍵字,必須放在第一行。
    }
}
           

(4)父類隻能通路自己的資料成員或者方法。

代碼示例:

class Animal {
    protected String name;
    private int age;
    public int a;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void sleep(){
        System.out.println("睡覺");
    }
}
class Cat extends Animal{
    private String sex;
    public Cat(String name, int age) {
        super(name, age);
    }
     public void func(){
        super.sleep();
        int a=super.a;
    }
}
public class Test {
    public static void main(String[] args) {
    Animal animal=new Animal("動物",12);
        animal.sex;//此處報錯  因為父類Animal中沒有sex資料成員。
    }
}
           

(5)Java 中一個子類隻能繼承一個父類。

(6)對于父類的 private 的字段和方法, 子類中是無法通路的。

(7)被final所修飾的類叫做密封類,不能被繼承。

(8)B繼承A,C繼承B,這種稱為多層繼承。

3.使用繼承的目的

為了代碼的複用。 建立了類與類之間的關系,繼承是多态的前提。

代碼示例:

Animal是父類,Dog和Cat是子類。

JavaSE基礎知識【五】:繼承繼承
class Animal {
    protected String name;
    private int age;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    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;
    }
    public void eat(){
        System.out.println(this.name+"吃飯");
    }
}
class Cat extends Animal{
    private String sex;
    public Cat(String name, int age) {
        super(name, age);
    }
    public Cat(String name, int age, String sex) {
        super(name,age);
        this.sex = sex;
    }
}
class Dog extends Animal {
    private String sex;
    public Dog(String name, int age, String sex) {
        super(name,age);
        this.sex = sex;
    }
}
public class Test {
    public static void main(String[] args) {
        Cat cat=new Cat("喵喵",2,"man");
        cat.eat();
        System.out.println("==================");
        Dog dog=new Dog("叮當",3,"man");
        dog.eat();
        dog.bark();
        }
}
           

4.繼承中的代碼塊

先列印父類的靜态代碼塊,在列印子類的靜态代碼塊,然後為執行個體代碼塊,然後構造方法。

JavaSE基礎知識【五】:繼承繼承
JavaSE基礎知識【五】:繼承繼承
JavaSE基礎知識【五】:繼承繼承
JavaSE基礎知識【五】:繼承繼承
JavaSE基礎知識【五】:繼承繼承

5.組合

a part of 或者has a的關系

代碼示例:

class Address{
    public String domic;
    public int floor;
    public Address(String domic, int floor) {
        this.domic = domic;
        this.floor = floor;
    }
    @Override
    public String toString() {
        return "Address{" +
                "domic='" + domic + '\'' +
                ", floor=" + floor +
                '}';
    }
}
class Student{
    public String name;
    public int age;
    public Address address;
    public Student(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}
public class Test2 {
    public static void main(String[] args) {
        Address address=new Address("#1",3);
        Student student=new Student("檸萌",18,address);
        System.out.println(student);
    }
}
//列印結果:Student{name='檸萌', age=18, address=Address{domic='#1', floor=3}}