java复习之面向对象3(继承)

继承
目的就是为了让代码能够很好的被重复使用
以前进行代码重用,主要是通过方法来完成
继承是为了把类进行重用
继承相关的核心概念
1.父类(被继承)基类 超类
2.子类(继承的)派生类 子类
extends 关键字 保持现有功能存在的前提下,加入了新的功能

代码中如果出现“重复代码”往往意味着一定的风险
代码的维护性会下降

在以下场景中,设计到三个类。

动物类(属性:名字,方法吃)
猫类
鸟类

package Java0120;

public class Animal {
    public String name;

    public void  eat(String food){
        System.out.println(name+"正在吃"+food);
    }
}

package Java0120;

public class Bird extends Animal {
    public void fly(){
        System.out.println(name+"正在飞");
    }
}


package Java0120;

public class Cat extends Animal {
    public void jump(){
        System.out.println(name+"正在跳");
    }
}


如果三个类完全一样就没必要搞三个类(搞一个)
如果三个类有些部分一样,有些部分不一样肯定需要三个类,又希望能够进行代码重用就可以用继承把Cat和Bird相同的部分提取出来放到Animal中,然后再让Cat和Bird分别继承自Animal
在这里插入图片描述
使用extends去继承

继承就是为了把多个类之间共同的代码提取出来,放到“父类”中,然后再由各个子类分别继承这个父类从而就可以把这些重复代码消灭了

java中是单继承,一个类只有一个父类,父类也可以继承其他的类,一个类可被多个类继承
子类会继承父类的所有方法,无论是public,还是private,只不过private修饰的成员在子类中无法访问。

子类的实例会包含父类的实例
当我们去new一个Cat实例的时候,就会创建一个Animal实例(在Cat内部)
在这里插入图片描述
使用super关键字就能获取到父类的实例的引用
左边的那部分使用super访问
右边的部分使用this访问

每个类都有构造方法,如果你不显示的创建构造方法,那么编译器会给这个类自动生成一个没有参数的构造方法(默认的构造方法)
如果直接new子类实例,就会调用到父类刚刚这个自动生成的没有参数的构造方法
当父类里有构造方法时,并且这个构造方法带参数的时候,编译器就不再自动生成无参数版本的构造方法了
此时再创建子类实例就需要显示的调用父类的构造方法,并且进行传参,否则创建不出来父类的实例就会编译出错

当父类有多个构造方法时,子类需要显示的决定使用哪一个构造方法在这里插入图片描述
例:有参还是无参
父类如果是无参的构造方法,子类可以省略构造方法的调用(与父类无显示构造方法的情况一样)

在这里插入图片描述

从父类继承过来的属性,使用super 和this 都可以调用且调用的是同一个属性

如果属性只在子类中,则只可以用this访问

在这里插入图片描述
显示调用父类的构造方法,必须把父类的构造方法放在第一行(这样的写法是错误的) ,先执行父类构造再执行子类的构造
protected
在这里插入图片描述
final可以限制继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值