千禧难题之六:
描述粘性不可压缩流体动量守恒的运动方程。简称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类,实现如下要求:
基本信息包括手机的品牌(brand),颜色(color),价格(price),其中价格不能少于500,否则输出“价格不能低于500!”,并赋默认值为500.
分别为三个属性设置赋值和取值的方法。
拥有specification()方法,在控制台输出每个手机的品牌、颜色和价格。
编写PhoneTest()类,为Phone对象的属性赋予初值,并调用specification()方法输出手机的详细信息。
编辑:玥怡居士|审核:世外居士
▼
往期精彩回顾
▼
我就知道你“在看”