前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测开技能】Java系列(二十 五)继承

【测开技能】Java系列(二十 五)继承

作者头像
雷子
发布2022-09-29 20:22:20
2390
发布2022-09-29 20:22:20
举报
文章被收录于专栏:雷子说测试开发

Java系列分享

【测开技能】Java语言系列(一)Java入门

【测开技能】Java语言系列(二)Java基础语法

【测开技能】Java语言系列(三)变量和数据类型

【测开技能】Java语言系列(四) 整数运算

【测开技能】Java语言系列(五) 浮点数运算

【测开技能】Java语言系列(六) 布尔运算

【测开技能】Java语言系列(七) 字符和字符串

【测开技能】Java语言系列(八)数组类型

【测开技能】Java语言系列(九)输入和输出

【测开技能】Java语言系列(十)if判断

【测开技能】Java语言系列(十一)switch多重选择

【测开技能】Java语言系列(十二)while循环

【测开技能】Java语言系列(十三)dowhile循环

【测开技能】Java语言系列(十四)for循环

【测开技能】Java语言系列(十五)break和continue

【测开技能】Java语言系列(十六)简单知识训练

【测开技能】Java语言系列(十七)数组操作--遍历与排序

【测开技能】Java语言系列(十八 )多维数组

【测开技能】Java语言系列(十九 )命令行参数

【测开技能】Java系列(二十 )初识面向对象编程

【测开技能】Java系列(二十 一)面向对象编程基础

【测开技能】Java系列(二十 二)方法

【测开技能】Java系列(二十 三)构造方法

【测开技能】Java系列(二十 四)方法重载

正文

我们先看两个类

代码语言:javascript
复制
 class Mantou {
        private String birthcity;
        private float price;
        private boolean sale;

        public boolean isSale() {
            return sale;
        }

        public void setSale(boolean sale) {
            this.sale = sale;
        }

        public String getBirthcity() {
            return birthcity;
        }

        public void setBirthcity(String birthcity) {
            this.birthcity = birthcity;
        }

        public float getPrice() {
            return price;
        }

        public void setPrice(float price) {
            this.price = price;
        }
    }

    class Food {
        private String birthcity;
        private float price;
        public  Food(){

        }

        public Food(String birthcity, float price) {
            this.birthcity = birthcity;
            this.price = price;
        }

        public String getBirthcity() {
            return birthcity;
        }

        public void setBirthcity(String birthcity) {
            this.birthcity = birthcity;
        }

        public float getPrice() {
            return price;
        }

        public void setPrice(float price) {
            this.price = price;
        }
    }

我们可以看到,上面的两个类,一个Mantou。一个food,两个类之间的区别,Mantou类多了一个sale 字段,有对应的get set方法。那么能不能在Mantou类不用重复写那些重复的代码,

答案是可以的

就要用到继承,继承是面向对象编程中非常强大的一种机制,它首先可以复用代码。

如何实现继承呢

代码语言:javascript
复制
 class Mantou  extends Food{

        private boolean sale;

        public boolean isSale() {
            return sale;
        }

        public void setSale(boolean sale) {
            this.sale = sale;
        }
    }

用extends 就实现了继承,不需要实现编写与父类重复的方法,测试下

代码语言:javascript
复制
public class main {

    public static void main(String[] args) {
        Mantou hello = new Mantou();
        hello.setBirthcity("beijing");
        hello.setPrice(1);
        hello.setSale(true);
        System.out.println(hello.getBirthcity());
        System.out.println(hello.getPrice());
        System.out.println(hello.isSale());
    }
}

结果

这样,一个简单的继承就实现完毕了,有了继承,可以很简单的让类拥有父类的方法。

在OOP的术语中,我们把Food称为超类(super class),父类(parent class),基类(base class),把Mantou称为子类(subclass),扩展类(extended class)。

继承树

注意到我们在定义Food的时候,没有写extends。在Java中,没有明确写extends的类,编译器会自动加上extends Object。所以,任何类,除了Object,都会继承自某个类。

如果没有写,都会继承Object。

Java只允许一个class继承自一个类,因此,一个类有且仅有一个父类。只有Object特殊,它没有父类。

protected

继承有个特点,就是子类无法访问父类的private字段或者private方法。

在Mantou 有一个toString方法,调用父类的birthcity,

代码语言:javascript
复制
   
        public String toString() {
            return birthcity;
        }

编译执行报错

这使得继承的作用被削弱了。为了让子类可以访问父类的字段,我们需要把private改为protected。用protected修饰的字段可以被子类访问:

代码语言:javascript
复制
  protected String birthcity;
        protected float price;

运行前在main方法增加下面,再次运行

代码语言:javascript
复制
    System.out.println(hello.toString());

结果

可以正常打印。

因此:protected关键字可以把字段和方法的访问权限控制在继承树内部,一个protected字段和方法可以被其子类,以及子类的子类所访问

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 继承树
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档