Java继承知识整理(详细)

一、继承

继承是java面向对象编程技术的一块基石,它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承就是指在现有类的基础上,去构建一个新类,新类成为子类(派生类),原有的类称为父类(基类/超类)。

二、继承的优缺点

优点:

1.提高代码的复用性。

2.提高代码的可维护性。

3.提高开发效率。

缺点:

提高了类与类之间的耦合性。

三、继承的格式

class 父类{

}
class 子类 extends 父类{
    
}

四、继承的特性

1.子类拥有父类非private的属性,方法。

2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

3.子类可以用自己的方式实现父类的方法。(重写)

4.Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类。

例1:

//定义手机类
class Phone{
    //定义手机的价格
    double price = 500;
    //手机都能打电话
    public void call(){
        System.out.println("手机可以打电话");
    }
}
//定义具体的手机类:华为手机类,让其继承手机类Phone
class HuaWei extends Phone{

    //定义子类特有的方法,在子类中可以直接使用父类的非私有的成员变量
    public void show(){
        //输出父类中定义的手机的价格
        System.out.println(price);
    }
}
//定义测试类
class Test{
    public static  void main(String[] args){
        //创建子类对象
        HuaWei hw = new HuaWei();
        //因为继承了Phone类,所以继承了父类的属性和方法,所以可以调用父类中的call()方法
        hw.call();
        //调用子类特有的方法,输出父类中定义的手机价格
        hw.show();
        //子类对象也可以直接调用父类中非私有的成员变量
        System.out.println(hw.price);
    }
}

如果子类定义了与父类同名的变量,那么在子类中,或在子类对象的调用中,会优先使用子类本身定义的变量,要想使用父类的,需要使用super关键字调用。

例2:

//定义手机类
class Phone_2{
    //定义手机的价格
    double price = 500;

}
//定义具体的手机类:华为手机类,让其继承手机类Phone
class HuaWei_2 extends Phone_2{
    //定义手机的价格,变量名与父类相同
    double price = 600;
    //定义子类特有的方法
    public void show(){
        //这里会优先使用子类本身定义的变量price
        System.out.println(price);
        //输出父类的要使用super关键字调用
        System.out.println(super.price);
    }
}
//定义测试类
class Test_2{
    public static  void main(String[] args){
        //创建子类对象
        HuaWei_2 hw_2 = new HuaWei_2();
        //调用子类特有的方法,输出子类本身定义的手机价格,和父类中定义的价格
        hw_2.show();

//子类对象调用price
System.out.println(hw_2.price);



    }
}

在子类中定义了与父类中一模一样的成员方法(权限大于或等于父类方法的权限),此操作称之为方法重写。

当子类对象调用方法是,会优先调用自己重写后方法,如果没有重写,那么才会去调用父类中的方法。

例3:

//定义手机类
class Phone_3{
    //定义打电话方法
    public void call(){
        System.out.println("手机可以打电话!");
    }
}
//定义具体的手机类:华为手机类,让其继承手机类Phone
class HuaWei_3 extends Phone_3{
    //重写父类中的打电话方法
    @Override
    public void call() {
        //使用super关键字调用父类中的call方法
        super.call();
        System.out.println("华为手机当然可以打电话!");
    }
}
//定义测试类
class Test_3{
    public static  void main(String[] args){
        //创建子类对象
        HuaWei_3 hw_3 = new HuaWei_3();
        //优先调用子类重写后的方法
        hw_3.call();
    }
}

注意:

被final修饰的类和方法,不能被继承和重写!

子类不能继承父类的构造器(构造方法或者构造函数),如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。

猜你喜欢

转载自blog.csdn.net/u012430402/article/details/81133097