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

千禧难题之六:             

       描述粘性不可压缩流体动量守恒的运动方程。简称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 属性,代码如下:

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属性,代码如下:

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属性,代码如下:

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() 方法,输出不同的信息。具体的代码如下:

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()方法输出手机的详细信息。

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

往期精彩回顾

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

Java学习历程之----进阶篇总结(十三)

Java学习历程之----进阶篇(十二)

我就知道你“在看”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值