Java 面向对象编程——继承

OOP(面向对象)语言的 三大特性为:封装、继承、多态。
此文章将介绍关于继承的内容。

创建三个类在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上述三个类中的红色圈出部分发现,代码的重复性比较高*
在实际写代码的过程中,代码的可重用性比较低,接下来就介入了继承的操作

extends 继承

public class Animal {
    public String name;

    public void eat(){
        System.out.println(this.name + "吃饭!");
    }
}

public class Dog extends Animal {
    public String name;

    public void eat(){
        System.out.println(this.name + "吃饭!");
    }
}

在这里插入图片描述
上述代码块中,Dog 为子类,也叫做派生类,Animal为父类,也叫做基类或者超类,extends 代表继承关系,Dog 继承了 Animal

作用:为了代码的可重用性(重复使用)

示例:当把Dog类里面的部分代码屏蔽掉以后↓
当把Dog类里面的部分代码屏蔽掉以后
main方法中可以正常书写 Dog 被屏蔽掉以后的代码↓
在这里插入图片描述
并且可以正常运行↓
在这里插入图片描述
因为 Dog 继承了Animal ,所以 eat() 和 name 都被继承过来
这样就可以吧一些公共的属性或者方法放在父类当中

注意事项

  • 当Bird 想要继承 Animal 和 Dog两个类的时候↓

注意:错误代码↓
在这里插入图片描述

  • 当用private 修饰 name 以后, Bird 当中的 name 就不能被访问↓
public class Animal {
    private String name;

    public void eat(){
        System.out.println(this.name + "吃饭!");
    }

在这里插入图片描述
当用private 修饰 name 以后, Bird 当中的 name 就不能被访问↑

  • 当添加了Anmial 的构造方法以后
public class Animal {
    public String name;

    public void eat(){
        System.out.println(this.name + "吃饭!");
    }

    public Animal(String name) {		//写了 Animal 的构造方法
        this.name = name;
    }
}

在这里插入图片描述
在这里插入图片描述
上述两个图片展示,此时,Dog 和 Bird 立刻报错

注意事项:
1、Java 当中只能继承一个类,不能同时继承多个类,只支持单继承。
2、父类的私有属性和方法不能在子类当中进行访问,也就是对于父类的 private 的字段方法子类中无法访问。
3、子类继承了父类除构造方法外的所有东西。
4、子类继承了父类,子类当中会包含父类的属性。

super关键字

子类如果要实例化,那么首先需要实例化父类,子类要构造,那么你需要先构造父类。

子类当中如何构造父类?
答:构造对象只有一种方法,调用父类的构造方法来构造对象。借助super 关键字。

super关键字:代表父类对象的引用。
1、super() ; 代表调用父类的构造方法,只能放在第一行。
2、super.data; 代表调用父类的属性。
3、super.func(); 代表调用父类的成员方法。

public class Bird extends Animal{
    public int age;
    public Bird(String name,int age){
        super(name);		//子类并没有继承父类的构造方法,只是在子类当中
							//进行了显示调用,通过super关键字        
        this.age = age;
        
    }

    public void fly(){
        System.out.println(this.name + "正在飞!");
    }
 
}

注意:super();只能调用一次。

protected 关键字

图中 变量a 拥有的访问权限是默认的权限
在这里插入图片描述

四种访问修饰限定符

在这里插入图片描述

添加一个 protected 修饰的 sex ↓
在这里插入图片描述
建立两个不同的包 ↓
在这里插入图片描述

在这里插入图片描述
Test 继承了 Animal 用 super 后可以访问 name
在这里插入图片描述
删除 entends 关键字以后 super 也不能访问↓
在这里插入图片描述

更复杂的继承关系

// Animal.java 
public Animal { 
 ... 
} 
// Cat.java 
public Cat extends Animal { 
 ... 
} 
// ChineseGardenCat.java 
public ChineseGardenCat extends Cat { 
 ... 
} 
// OrangeCat.java 
public Orange extends ChineseGardenCat { 
 ... 
} 
......

在上述代码中,这种继承方式成为多层继承,即子类还可以派生出新的子类↑
注意:
一般我们不希望出现三层以上的继承关系,如果继承层数太多就要考虑重构。

final 关键字

如果一个类不想被继承,在类前面加一个final 修饰
final int SIZE = 10; SIZE:常量 → 不能被修改
final 修饰的类:密封类 → 当前类不能被继承
final 也可以修饰方法 叫做密封方法

继承 → is…a… 的关系 → …是一个…
组合 →has…a… 或者 a part of…

下图就构成了一个组合关系↓
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值