继承
1.继承概述
继承是面向对象的三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
1.1 继承的格式
- 格式:public class 子类名 extends 父类名{}
 - 范例:public class Zi extends Fu{}
 - Fu:父类,也叫基类、超类
 - Zi:子类,也叫派生类
 
1.2 继承中子类的特点
- 子类可以有父类的内容
 - 子类还可以有自己特有的内容
 
2.继承的好处和弊端
好处:
- 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
 - 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
 
弊端:
继承让类和类之间产生了关系,类的耦合性增强了,当父类中发生变化时子类实现也不得不跟着发生变化,削弱了子类的独立性。
什么时候使用继承?
假设法:
有两个类A和B,如果他们满足A是B得一种或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑用继承来实现,否则就不能乱用继承
举例:
水果和苹果,猫和动物,猫和狗
3.继承中变量的访问特点
在子类方法中访问一个变量:
- 先在子类方法中的范围找
 - 在子类成员范围找
 - 在父类成员范围找
 - 如果都没有就报错,不考虑父类的父类
 
4.super关键字
super关键字和this关键字的用法相似
- this:代表本类对象的引用
 - super:代表父类对象的引用(父类存储空间的标识)
 
| 关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 | 
|---|---|---|---|
| this | this.成员变量:访问本类中的成员变量 | this(...):访问本类的构造方法 | this.成员方法(...):访问本类的成员方法 | 
| super | super.成员变量:访问父类的成员变量 | super(...):访问父类的构造方法 | super.成员方法:访问父类的成员方法 | 
示例:
父类
package com.itheima_04;
public class Father {
    public int age = 40;
}
子类
package com.itheima_04;
public class Son extends Father {
    public int age = 30;
    public void show(){
        int age = 10;
        //访问方法中的age
        System.out.println(age);
        //访问子类中的age
        System.out.println(this.age);
        //访问父类中的age
        System.out.println(super.age);
    }
}
测试类
package com.itheima_04;
public class Test {
    public static void main(String[] args) {
        Son s = new Son();
        s.show();
    }
}
5.继承中构造方法的访问特点
子类中所有的构造方法都默认会访问父类中无参的构造方法
- 因为子类要继承父类中的数据,可能还会使用父类中的数据。所以子类初始化之前,一定要先完成对父类的初始化。
 - 每一个子类构造方法的第一条语句默认都是:super()
 
6.方法重写
方法重写概述
- 子类中出现了和父类中一模一样的方法声明
 
方法重写的应用
- 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类的功能又定义了子类特有的内容
 
@Override
- 是一个注解
 - 可以帮助我们检查重写方法的方法声明的正确性
 
示例:
Phone
package itheima_05;
//手机类
public class Phone {
    public void call(String name){
        System.out.println("给" + name + "打电话!");
    }
}
NewPhone
package itheima_05;
//新式手机
public class NewPhone extends Phone{
    @Override                   //注解,可以帮助检查方法声明的正确性
    public void call(String name){
        System.out.println("开启视频功能");
        super.call(name);
    }
}
PhoneDemo
package itheima_05;
//测试类
public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone phone = new Phone();
        phone.call("蓝头发妹妹");
        System.out.println("============");
        NewPhone newPhone = new NewPhone();
        newPhone.call("蓝头发妹妹");
    }
}
7.重写的注意事项
- 私有方法不能被重写(父类私有成员子类是不能继承的)
 - 子类方法访问权限不能比父类方法中的访问权限低
 
8.继承的注意事项
- Java中的类只支持单继承,不支持多继承
 - Java中类是支持多层继承的
 
                    
                
                
            
        
浙公网安备 33010602011771号