面向对象4(继承)

概述:类与类之间产生关系,一个类在另一个类的基础上创建,新建的类使用已创建的类的类成员,但也有自己特有的类成员,这两个类的关系就是继承。

语法:

class A{
}

class B extends A{
}

A类:称为父类,又称为基类,超类。
B类:称为子类,又称为派生类,衍生类。
extends : 关键字,表示继承

继承的优缺点:

优点:

  1. 提高代码的复用性。
  2. 提高代码的可维护性。
  3. 多态的前提

缺点:

  • 提高耦合,降低内聚(当父类损坏,继承了子类都会出现BUG)

解决:

  1. 装饰着设计模式
  2. 代理设计模式

注意点:
父类的私有成员无法被子类继承

  • 如果需要对父类的私有成员进行访问,则需要封装该成员,再根据提高的getter/setter进行访问。

父类的构造方法无法被子类继承

  • 构造方法无法被继承,但是可以在子类的构造方法中通过super(参数列表)进行对父类构造方法的调用。

不要为了某个类成员而使用继承

  • 子类必须是父类的一个特例,满足Is a 要求。
  • 子类必须全继承父类的成员,不能部分继承类成员。

继承中的属性:

  • 继承中不同名属性访问
    子类能够使用父类的非私有成员。
  • 继承中同名属性访问
    如果属性同名,调用时使用子类的属性
    如果属性同名,想要调用父类的属性,需要用到 super 关键字
class Fu{
    int x = 10;
}
class Zi extends Fu{
    int x = 20;
    public void show(){
        System.out.println(x);
        System.out.println(super.x);
    }
}
public class Demo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
    }
}

输出结果:
在这里插入图片描述
super关键字

含义:代表父类,存储父类对象地址。
作用:区分子类成员和父类成员

class Fu{
    public Fu(){
        System.out.println("父类的无参构造方法");
    }
}
class Zi extends Fu{

}
public class Demo {
    public static void main(String[] args) {
        Zi zi1 = new Zi();    
    }
}

输出结果:
在这里插入图片描述结论:

  • 类中都有一个隐式的无参构造方法,当实例化子类时,子类的会隐式调用父类的无参构造方法【 super()】。
class Fu{
    public Fu(){
        System.out.println("父类的无参构造方法");
    }
    public Fu(int x){
        System.out.println("父类的有参构造方法");
    }
}
class Zi extends Fu{

    public Zi(int x) {
        super(x);
    }

}
public class Demo {
    public static void main(String[] args) {
        Zi zi1 = new Zi();
        Zi zi2 = new Zi(2);
    }
}

输出结果:
在这里插入图片描述

结论:

  1. 在执行子类构造方法代代码前,会先调用父类构造方法,完毕后再回到子类构造方法去执行。
  2. 如果需要调用父类有参构造方法,则需要通过显式super(参数列表)进行调用。
  3. 当显式super(参数列表)进行调用父类有参构造方法时,原隐式调用父类无参构造方法的super()将消失。
  4. 父类自定义有参构造方法但没有显式定义无参构造方法,则子类无法调用父类的无参构造方法。
  5. 同一个构造方法中不能同时存在this() 和 super(),因为这两个关键字都在抢构造方法中的第一行。
  6. 所有类都继承Object类,而无显式继承父类,都隐式继承了Object类。

继承中的方法:

  • 继承中不同方法名访问
    直接访问

  • 继承中相同方法名访问
    直接继承父类方法,但当父类方法不能满足子类的方法需求时,可以进行方法重写。

结论:

  1. 在具有继承关系的类中,存在一个方法名相同,返回值类型相同,参数相同(参数类型,个数,顺序)方法,就是方法重写(override)技术。

  2. 重写作用:父类方法无法满足子类需求时,就可以使用重写。

  3. @Override注释可以验证子类方法是否对父类方法重写正确。

  4. 父类static方法无法被重写

  5. 父类private方法无法被重写

  6. 子类重写方法要与父类方法访问修饰符权限一致或更大。

继承特性:

  • 单继承
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值