目錄
- 繼承
-
- 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是子類。
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.繼承中的代碼塊
先列印父類的靜态代碼塊,在列印子類的靜态代碼塊,然後為執行個體代碼塊,然後構造方法。
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}}