前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习历程之----提升篇(二)

Java学习历程之----提升篇(二)

作者头像
用户5410712
发布2022-06-01 18:16:43
3400
发布2022-06-01 18:16:43
举报
文章被收录于专栏:居士说AI

千禧难题之六:

描述粘性不可压缩流体动量守恒的运动方程。简称N-S方程。因1821年由纳维和1845年由斯托克斯分别导出而得名。是流体力学中描述粘性牛顿流体的方程,是尚未被完全解决的方程,只有大约一百多个特解被解出来,是最复杂的方程之一。N-S方程反映了粘性流体(又称真实流体)流动的基本力学规律,在流体力学中有十分重要的意义。它是一个非线性偏微分方程,求解非常困难和复杂,只有在某些十分简单的流动问题上能求得精确解;但在有些情况下,可以简化方程而得到近似解。

前言

上周我们学习了类的封装,大家有没有觉得其实Java也不是那么难,封装就像是把一个类自己比较私有的属性和方法锁好,如果外界想要访问,也只能通过这个类自己提供的方法去访问。这一周我们继续学习java三大特性之二----继承!

一、继承

一、继承

继承和现实生活中的“继承”的相似之处是保留一些父辈的特性,从而减少代码冗余,提高程序运行效率。Java中的继承就是在已经存在类的基础上进行扩展,从而产生新的类。已经存在的类称为父类、基类或超类,而新产生的类称为子类或派生类,我们以后都统一称为父类和子类。在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法。

二、继承的语法格式

二、语法格式

Java 中子类继承父类的语法格式如下:

修饰符 classclass_name extends extend_class {

// 类的主体

}

其中,class_name表示子类的名称;extend_class表示父类的名称;extends关键字直接跟在子类名之后,Java 的继承通过 extends 关键字来实现,extends 的英文意思是扩展,而不是继承。extends 很好的体现了子类和父类的关系,即子类是对父类的扩展,子类是一种特殊的父类。extends后面是该类要继承的父类名称。例如:

public class Dog extends Animals{ }

类的继承不改变类成员的访问权限。

三、继承的优缺点

三、在面向对象的语言中,继承是必不可少、非常优秀的机制,但任何语言都有它的优缺点。

3.1 优点:

1.实现代码共享,减少创建类的工作量,使子类可以拥有父类的方法和属性;

2.提高代码维护性和可重用性;

3.提高代码的可扩展性,更好的实现父类的方法。

3.2 缺点:

1.继承是侵入性的。只要继承,就必须拥有父类的属性和方法;

2.降低代码灵活性。子类拥有父类的属性和方法后多了些约束;

3.增强代码耦合性(开发项目的原则为高内聚低耦合),当父类的常量、变量和方法被修改时,需要考虑子类的修改,有可能会导致大段的代码需要重构。

3.3 使用继承的注意点:

1.子类一般比父类包含更多的属性和方法。

2.父类中的 private 成员在子类中是不可见的,因此在子类中不能直接使用它们。

3.Java 只允许单一继承(即一个子类只能有一个直接父类),C++ 和python都可以多重继承(即一个子类有多个直接父类)。

四、实战

下面我们通过一个简单的例子来帮助大家更好地理解继承

Teacher和Student都属于People,他们具有共同的属性:name、age、gender和ID,而Student还具有stuID和所学专业Smajor两个属性,教师还具有教龄Tyear和所教专业Tmajor两个属性。使教师(Teacher)类和学生(Student)类都继承于人(People)类,具体的实现步骤如下。

1)首先创建人类 People,并定义 name、age、sex、sn 属性,代码如下:

代码语言:javascript
复制
package tisheng2;
public class People {
    public String name; // 姓名
    public int age; // 年龄
    public String gender; // 性别
    public String ID; // 身份证号
    public People(String name, int age, String gender, String ID) {//构造方法,传入参数
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.ID = ID;
    }
    public String toString() {//toString方法输出各个属性
        return "姓名:" + name + "\n年龄:" + age + "\n性别:" + gender + "\n身份证号:" + ID;
    }
}

2)创建 People 类的子类 Student 类,并定义 stuID 和 Smajor属性,代码如下:

代码语言:javascript
复制
package tisheng2;
public class Student extends People {
    private String stuID; // 学号
    private String Smajor; // 所学专业
    public Student(String name, int age, String gender, String ID, String stuID, String Smajor) {
        super(name, age, gender, ID); // 调用父类中的构造方法
        this.stuID = stuID;
        this.Smajor = Smajor;
    }
    public String toString() {//重写父类中的toString方法
        return "姓名:" + name + "\n年龄:" + age + "\n性别:" + gender + "\n身份证号:" + ID + "\n学号:" + stuID + "\n所学专业:" + Smajor;
    }
}

3)创建 People 类的另一个子类 Teacher,并定义 Tyear 和 Tmajor属性,代码如下:

代码语言:javascript
复制
package tisheng2;
public class Teacher extends People {
    private int Tyear; // 教龄
    private String Tmajor; // 所教专业
    public Teacher(String name, int age, String gender, String ID, int Tyear, String Tmajor) {
        super(name, age, gender, ID); // 调用父类中的构造方法
        this.Tyear = Tyear;
        this.Tmajor = Tmajor;
    }
    public String toString() {//重写父类中的toString方法
        return "姓名:" + name + "\n年龄:" + age + "\n性别:" + gender + "\n身份证号:" + ID + "\n教龄:" + Tyear + "\n所教专业:" + Tmajor;
    }
}

4) 编写测试类 Test(),在该类中创建 People 类的不同对象,分别调用它们的 toString() 方法,输出不同的信息。具体的代码如下:

代码语言:javascript
复制
package tisheng2;
public class Test {
    public static void main(String[] args) {
        // 创建Student类对象
        People stuPeople = new Student("小圈圈", 16, "女", "1231231233456", "00001", "计算机科学与技术");
        System.out.println("----------------学生信息---------------------");
        System.out.println(stuPeople);
        System.out.println();
        // 创建Teacher类对象
        People teaPeople = new Teacher("张三三", 30, "男", "4564564566789", 5, "计算机技术");
        System.out.println("----------------教师信息----------------------");
        System.out.println(teaPeople);
    }
}

运行结果及截图如下图所示:

小编有话说

边学新知识的同时,前面学的知识点我们也要时常练习,本周我们就来小试一题类的封装吧。题目如下:

编写表示手机的Phone类,实现如下要求:

  1. 基本信息包括手机的品牌(brand),颜色(color),价格(price),其中价格不能少于500,否则输出“价格不能低于500!”,并赋默认值为500.
  2. 分别为三个属性设置赋值和取值的方法。
  3. 拥有specification()方法,在控制台输出每个手机的品牌、颜色和价格。

编写PhoneTest()类,为Phone对象的属性赋予初值,并调用specification()方法输出手机的详细信息。

编辑:玥怡居士|审核:世外居士

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

本文分享自 IT进阶之旅 微信公众号,前往查看

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

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

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